用原生方法替代multimap
时间: 2024-11-10 21:26:10 浏览: 18
在C++中,如果你想要替换`std::unordered_map<std::string, std::vector<int>>`这样的多映射(类似于`std::multimap`),可以考虑使用`std::map<std::pair<std::string, int>, bool>`结合自定义操作。这里的`bool`元素用于标记该键值对是否已被添加,因为`map`不允许存储重复键。
每当需要向多映射中添加一个新项目时,你可以创建一个新的`std::pair`包含键和值,然后检查这个键对是否已经存在。如果不存在,插入新的键值对;如果已存在,则忽略。
例如:
```cpp
#include <iostream>
#include <map>
// 自定义操作,检查并插入
void insertIntoMap(std::map<std::pair<std::string, int>, bool>& m, const std::string& key, int value) {
auto it = m.find({key, value});
if (it == m.end()) {
m[{key, value}] = true; // 插入新的键值对
std::cout << "Inserted {" << key << ", " << value << "}\n";
} else {
std::cout << "Key already exists.\n";
}
}
int main() {
std::map<std::pair<std::string, int>, bool> myMap;
insertIntoMap(myMap, "fruit", 1);
insertIntoMap(myMap, "fruit", 2); // 会打印"Key already exists."
return 0;
}
```
阅读全文