C++官网参考链接:https://cplusplus.com/reference/map/map/operators/
函数
<map>
std::relational operators (map)
(1) template <class Key, class T, class Compare, class Alloc>
bool operator== ( const map<Key,T,Compare,Alloc>& lhs, const map<Key,T,Compare,Alloc>& rhs );
(2) template <class Key, class T, class Compare, class Alloc>
bool operator!= ( const map<Key,T,Compare,Alloc>& lhs, const map<Key,T,Compare,Alloc>& rhs );
(3) template <class Key, class T, class Compare, class Alloc>
bool operator< ( const map<Key,T,Compare,Alloc>& lhs, const map<Key,T,Compare,Alloc>& rhs );
(4) template <class Key, class T, class Compare, class Alloc>
bool operator<= ( const map<Key,T,Compare,Alloc>& lhs, const map<Key,T,Compare,Alloc>& rhs );
(5) template <class Key, class T, class Compare, class Alloc>
bool operator> ( const map<Key,T,Compare,Alloc>& lhs, const map<Key,T,Compare,Alloc>& rhs );
(6) template <class Key, class T, class Compare, class Alloc>
bool operator>= ( const map<Key,T,Compare,Alloc>& lhs, const map<Key,T,Compare,Alloc>& rhs );
map的关系操作符
在map容器lhs和rhs之间执行适当的比较操作。
相等比较(operator==)是通过第一次比较sizes来执行的,如果它们匹配,则使用operator==对元素进行顺序比较,在第一次不匹配时停止(就像使用equal算法一样)。
小于比较(operator<)的行为类似于使用算法lexicographical_compare
,它以互反的方式使用operator<依次比较元素(即检查a<b和b<a)并在第一次出现时停止。
其他操作也在内部使用operator==和<来比较元素,就像执行了以下等价操作一样:
operation | equivalent operation |
---|---|
a!=b | !(a==b) |
a>b | b<a |
a<=b | !(b<a) |
a>=b | !(a<b) |
注意,这些操作都没有考虑到容器的内部比较对象(internal comparison object),而是直接比较(类型为value_type的)元素。
value_type是一个pair类型,因此,默认情况下,只有当两个元素的键和映射值比较相等时,两个元素的比较才相等,只有当第一个键较小,或者键相等而映射值较小时,一个元素的比较才小于另一个元素。
这些操作符在头文件<map>中重载。
形参
lhs,rhs
map容器(分别到操作符的左边和右边),具有相同的模板形参(Key、T、Compare和Alloc)。
用例
// map comparisons
#include <iostream>
#include <map>
int main ()
{
std::map<char,int> foo,bar;
foo['a']=100;
foo['b']=200;
bar['a']=10;
bar['z']=1000;
// foo ({{a,100},{b,200}}) vs bar ({a,10},{z,1000}}):
if (foo==bar) std::cout << "foo and bar are equal\n";
if (foo!=bar) std::cout << "foo and bar are not equal\n";
if (foo< bar) std::cout << "foo is less than bar\n";
if (foo> bar) std::cout << "foo is greater than bar\n";
if (foo<=bar) std::cout << "foo is less than or equal to bar\n";
if (foo>=bar) std::cout << "foo is greater than or equal to bar\n";
return 0;
}
输出:
返回值
如果条件成立,则为true,否则为false。
复杂度
C++98
最多达到lhs和rhs的size中的线性。
C++14
对于(1)和(2),如果lhs和rhs的sizes不同,则为常量,否则最多达到size(相等比较)中的线性。
对于其他的,最多达到在较小的size(每一个表示两次使用operator<的比较)中的线性。
iterator的有效性
没有变化。
数据竞争
两个容器lhs和rhs都被访问。
最多它们所包含的所有元素都可以被访问。
异常安全
如果元素的类型支持带有无抛出保证的适当操作,则该函数永远不会抛出异常(无抛出保证)。
在任何情况下,函数都不能修改它的实参。