从值和键中的值访问键

时间:2015-04-09 09:47:47

标签: c++ boost stl

我的项目需要两个访问者。

  • 使用密钥(简单)
  • 访问价值
  • 使用值访问密钥(有点棘手)

价值在我的项目中也是唯一的


请建议使用更好的容器以及如何使用?

我想使用STL或BOOST。

3 个答案:

答案 0 :(得分:3)

您要找的是bidirectional map

STL中没有一个,但您可以查看Boost.Bimap进行其他实施。

如果你想自己实现它,你可以简单地使用两个常规的单向映射。如果你使用指针,应该有很少的内存开销和不错的性能。

答案 1 :(得分:2)

这是我两天前在项目中使用的内容。

#include <boost/bimap.hpp>
class ClientManager
{
    typedef boost::bimap<
        boost::bimaps::set_of<int>,
        boost::bimaps::set_of<int>
    > ConnectedUsers; // User Id, Instance Id
    ConnectedUsers m_connectedUsers;
public:
    int getUserId(int instanceId);
    int getInstanceId(int userId);
};

int ClientManager::getInstanceId(int userId)
{
    auto it = m_connectedUsers.left.find(userId);
    return it->second;
}

int ClientManager::getUserId(int instanceId)
{
    auto it = m_connectedUsers.right.find(instanceId);
    return it->second;
}

...

// Insert
m_connectedUsers.insert(ConnectedUsers::value_type(id, instanceId));

// Erase
m_connectedUsers.left.erase(userId);

答案 2 :(得分:1)

如果您希望以任一方式访问,即 key-&gt; value和value-&gt; key ,您的设计可能不需要像{{1}这样的关联容器}}

尝试map std::pair

另外,如果您需要存储两个以上的值,可以使用std::tuple

HTH !!