我的项目需要两个访问者。
价值在我的项目中也是唯一的
请建议使用更好的容器以及如何使用?
我想使用STL或BOOST。
答案 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 !!