看來我可以排序std :: vector < std :: pair < int,std :: string > >,它會根據int值進行排序。這是一個明確定義的事情嗎? std :: pair是否有基於它的元素的默認排序?是std :: pair <int,std :: string>預定義良好的?
28
A
回答
44
std::pair
使用詞典對比:它會根據第一個元素進行比較。如果第一個元素的值相等,則會根據第二個元素進行比較。
在C++ 03標準的定義(部分20.2.2)是:
template <class T1, class T2>
bool operator<(const pair<T1, T2>& x, const pair<T1, T2>& y);
Returns: x.first < y.first || (!(y.first < x.first) && x.second < y.second).
1
的比較運算符。它使用字典對比:如果x的第一個元素小於y的第一個元素,則返回值爲true;如果y的第一個元素小於x的第一個元素,則返回值爲false。如果兩者都不是這種情況,則運算符<返回比較x和y的第二個元素的結果。只有在T1和T2都小於Comparable的情況下才能使用此運算符。這是一個全局函數,而不是一個成員函數。
看起來它實際上是兩種元素的組合。
6
根據我的的C++ 0x標準的副本,節20.3.3.26,std::pair
有operator<
定義,使得兩對x和y,返回
x.first < y.first || (!(y.first < x.first) && x.second < y.second)
我不能肯定,如果這也是2003年標準的一部分。我也應該注意到,如果元素本身不是Less Less相互比較的話,這不會被編譯。
0
是的。 operator<()
定義爲std::pair<T1, T2>
,假設T1
和T2
本身都是可比較的。
相關問題
- 1. std :: vector <std :: pair <int,std :: pair <bone,std :: string> >>不按int整理?
- 2. 爲什麼std :: pair <int, int>可以從const std :: pair <int, float>&?
- 3. std :: byte是否定義良好?
- 4. 開箱std :: pair <T,std :: pair <U,std :: pair <...> >>到元組<T,U,...>
- 5. 綁定const std :: pair <T, U>&std :: pair的值<const T, U>
- 6. 什麼是基於第一對「第一個」的std :: pair <int,std :: pair <int, int> >>的std :: vector向量的標準方式
- 7. 將std :: vector <std :: pair <const K, V> *>轉換爲std :: vector <std :: pair <const K, V>>
- 8. 調用'(std :: pair <unsigned int,unsigned int>)(unsigned int&,unsigned int)'
- 9. std :: pair <int, int> vs兩個int的結構
- 10. 的std :: priority_queue用的std ::對<int, int>
- 11. 是否有意義使用std :: unordered_map <int, int>而不是std :: map <int, int>?
- 12. 帶有std :: pair類型的鍵的__gnu_cxx哈希映射<std :: string,unsigned int>?
- 13. 'struct std :: pair <int, int>'has no member named'serialize'
- 14. 如何使用swig typemaps將std :: vector <std :: pair <std :: string,int>>從java返回到C++
- 15. 在std :: pair中存儲std :: string和自定義對象
- 16. std :: initializer_list <int const>不能從std :: initializer_list構建<int>
- 17. 定義std :: hash <std :: function>
- 18. 在C++中,你如何我有<code>std::vector<std::pair<int,double>></code>對
- 19. std :: set :: equal_range std :: pair的容器
- 20. 爲何'is_convertible'在<utility> std :: pair(STL)?
- 21. 應該std :: hash <T>當t是std :: pair <std :: hash>也支持兩個簡單類型時工作?
- 22. 強制std :: tuple包含std :: pair <fixed_type,T>
- 23. std :: future <既不是:: int,std :: string >>分段錯誤
- 24. 爲什麼std :: sub_match <T>公開繼承std :: pair <T, T>?
- 25. 在C++中繼承std :: pair和std :: map
- 26. 未定義模板的隱式實例化std :: basic_string <char,std :: char_traits <char>,std :: allocator <char>>'
- 27. 如何對矢量<pair <int,pair <int,pair <string,pair <int , int >>>>>進行排序
- 28. 如何在另一個std :: pair中插入一對std :: pair?
- 29. 使用自己的功能擴展std :: vector <std :: pair <...>>
- 30. 是++原子std ::原子<int>