用C ++交换地图的键和值

时间:2011-10-23 18:33:22

标签: c++

我正在寻找一个C ++函数,用于交换地图的内容...... 那是: 那些钥匙现在变成了物品,那些物品现在成了钥匙。 你能告诉我这件事有什么意义吗?

4 个答案:

答案 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)

将地图中的项目插入到多重地图中 - 首先是键值,键秒,使用适当的比较功能比较原始地图的两个值。插入所有值键项后,多图将按预期排序。完成工作!