一个map容器自己和自己比较内容大小,切不重复比较
时间: 2024-02-28 09:56:38 浏览: 64
如果你想比较两个map容器的内容大小,可以按照以下步骤进行:
1. 首先比较两个map容器的大小,如果大小不同,则直接返回大小比较结果。
```cpp
if (a.size() != b.size()) {
return a.size() < b.size();
}
```
2. 如果大小相同,则遍历其中一个map容器的所有元素,比较对应key在两个容器中对应的value大小。如果有任意一组key-value大小不同,则直接返回比较结果。
```cpp
for (auto it = a.begin(), jt = b.begin(); it != a.end(); ++it, ++jt) {
if (it->first != jt->first) {
return it->first < jt->first;
}
if (it->second != jt->second) {
return it->second < jt->second;
}
}
```
3. 如果所有元素的key-value都相同,则返回false,表示两个map容器相等。
将上述代码封装成一个比较函数即可:
```cpp
bool cmp(const map<int, int>& a, const map<int, int>& b) {
if (a.size() != b.size()) {
return a.size() < b.size();
}
for (auto it = a.begin(), jt = b.begin(); it != a.end(); ++it, ++jt) {
if (it->first != jt->first) {
return it->first < jt->first;
}
if (it->second != jt->second) {
return it->second < jt->second;
}
}
return false;
}
```
然后可以使用std::sort函数对多个map容器进行排序:
```cpp
map<int, int> a = {{1, 2}, {3, 4}};
map<int, int> b = {{1, 2}, {3, 5}};
map<int, int> c = {{1, 2}, {3, 3}};
vector<map<int, int>> v = {a, b, c};
std::sort(v.begin(), v.end(), cmp);
```
阅读全文