看来我可以排序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 :: byte是否定义良好?
- 3. 将std :: vector <std :: pair <const K, V> *>转换为std :: vector <std :: pair <const K, V>>
- 4. 调用'(std :: pair <unsigned int,unsigned int>)(unsigned int&,unsigned int)'
- 5. std :: pair <int, int> vs两个int的结构
- 6. 带有std :: pair类型的键的__gnu_cxx哈希映射<std :: string,unsigned int>?
- 7. 'struct std :: pair <int, int>'has no member named'serialize'
- 8. std :: initializer_list <int const>不能从std :: initializer_list构建<int>
- 9. 强制std :: tuple包含std :: pair <fixed_type,T>
- 10. std :: future <既不是:: int,std :: string >>分段错误
- 11. 如何在另一个std :: pair中插入一对std :: pair?
- 12. 使用自己的功能扩展std :: vector <std :: pair <...>>
- 13. 将移动语义与std :: pair或std :: tuple一起使用
- 14. php有C++的std :: pair吗?
- 15. C++ std :: pair的C#模拟是什么?
- 16. 为什么`std :: common_type_t <std :: ostream&,std :: ostream&>`等于`std :: ostream`而不是`std :: ostream&`?
- 17. 初始化列表std :: pair
- 18. 是否可以在一行中为std :: unordered <int,std :: vector <int>>赋值一个向量<int>?
- 19. std :: set <std :: pair <size_t,std :: string>> :: find(),没有字符串拷贝构造
- 20. 放置一个std :: pair
- 21. 什么更好std :: lock_guard <std::mutex>锁(std :: mutex mutex_var);或std :: mutex mutex_var.lock();
- 22. 将std :: map <int,vector <int>>复制到std :: map <std:string,vector <int>>
- 23. C++循环std :: vector <std :: map <std :: string,std :: string>>
- 24. 使用std :: accumulate生成地图的C++ <int,int>
- 25. C++的std ::地图<的std :: string,int>的获取值,其键开始与一个特定的字符串
- 26. std :: pow不返回预期的int值
- 27. 为什么在C++ 17中的std :: variant允许std :: variant <int,const int>
- 28. 是std :: map <std :: set <long>,double> AND std:map <std :: pair <long, long>,double> C++中的有效数据类型?
- 29. C++。为什么std :: cout << char + int打印int值?
- 30. C++ const正确性与std :: pair