我正在寻找一个C ++函数,用于交换地图的内容...... 那是: 那些钥匙现在变成了物品,那些物品现在成了钥匙。 你能告诉我这件事有什么意义吗?
答案 0 :(得分:13)
正如Geoffroy所说,std::map
不允许这种行为。但是,您可能希望使用类似STL的容器Boost.Bimap - 双向图。
Bimap是一种数据结构,表示两个集合的元素之间的双向关系。容器设计为两个相对的STL映射。集合X和集合Y之间的bimap可以被视为从X到Y的地图(此视图将被称为左地图视图)或从Y到X的地图(称为右地图视图)。
答案 1 :(得分:2)
template <class T1, class T2>
map<T2, T1> swapPairs(map<T1, T2> m) {
map<T2, T1> m1;
for (auto&& item : m) {
m1.emplace(item.second, item.first);
}
return m1;
};
int main() {
map<string, int> m;
m.emplace("111",5);
cout << m.at("111") << endl; // 5
map<int,string> m1 = swapPairs(m);
cout << m1.at(5) << endl; // 111
return 0;
}
答案 2 :(得分:1)
没有标准的方法/方法,你必须编写自己的函数。
这不是很难做到的事情,但首先要考虑以不同的方式去做。
如果你必须反转你的键/值,那么你的代码可能会生病 - 但是你没有保留容器的逻辑。
如果您想了解更多信息,请说明您要执行此操作的原因。
答案 3 :(得分:1)
将地图中的项目插入到多重地图中 - 首先是键值,键秒,使用适当的比较功能比较原始地图的两个值。插入所有值键项后,多图将按预期排序。完成工作!