c++中容器的使用与需要使用的重载

c++中容器的使用与需要使用的重载

STL库中一些容器在使用时需要重载一部分运算符

map容器

当使用map容器时,容器的键需要支持<运算符和==运算符,否则报错误error C2678: 二进制“<”: 没有找到接受“const _Ty”类型的左操作数的运算符(或没有可接受的转换)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>
#include<map>
#include<string>
using namespace std;

class Hash {
int m_nHash;
public:
Hash(int n) :m_nHash(n) {}
friend bool operator<(const Hash& l, const Hash& r) {
return l.m_nHash < r.m_nHash;
}
friend bool operator==(const Hash& l, const Hash& r) {
return l.m_nHash == r.m_nHash;
}
};
int main() {
map<Hash, string> obj;
obj.insert(pair<Hash, string>(3, "abc"));
return 0;
}

map容器的实现应用到了红黑树,在插入时会比较大小来平衡树,所以需要重载这两个运算符

容器调用了sort函数

当容器调用了std::sort()函数时,需要重载<运算符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
#include<vector>
#include<algorithm>
using std::vector;
using std::sort;

class Hash {
int m_nHash;
public:
Hash(int n) :m_nHash(n) {}
friend bool operator<(const Hash& l, const Hash& r) {
return l.m_nHash < r.m_nHash;
}
};
int main() {
vector<Hash> obj;
obj.push_back(2);
obj.push_back(1);
obj.push_back(3);
sort(obj.begin(), obj.end());
return 0;
}