c++ - 可以搜索相同成本的值和键的 map ?对称 map ?

标签 c++ boost

我将在 <unsigned long, const char*> 中最多包含 50 个条目 map 。这样做的原因是我在初始握手后使用的协议(protocol)通过数字引用字符串名称 - 我假设服务器上必须存在与我的类似的 map 。

我想要的是一个可以搜索键和值的映射(两者保证是唯一的并且绑定(bind)在一起),代码复杂性和性能成本大致相同。一个想法是:

symethric_map<unsigned long, const char*> map;
map[165]="NODE_A";
std::cout<<map->inverse["NODE_A"]<<std::endl; // Should print 165

这段代码的想法是symethric_map<T,N>::inverse是一个可以将映射键视为值的对象,反之亦然。当然,用简单的 map searchValue方法也可以解决这个问题。

我问这个是因为我将不断地将数字解析为字符串,反之亦然,并且没有任何可靠的数字生成系统,唯一的方法就是记住所有关系。 std::vector如果数字是有序的,则可以使用,但情况并非总是如此。我愿意使用任何 boost 功能以​​及 C++11 技巧。

最佳答案

简单用例:

Live On Coliru

#include <boost/bimap.hpp>
#include <boost/bimap/multiset_of.hpp>
#include <iostream>

namespace bm = boost::bimaps;

using symethric_map = bm::bimap<bm::set_of<unsigned long>, bm::set_of<const char*, std::less<std::string> > >;

int main() {
    symethric_map map;
    map.left.insert({165, "NODE_A"});
    std::cout << map.right.at("NODE_A") << "\n";
}

打印

165

关于c++ - 可以搜索相同成本的值和键的 map ?对称 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34001790/

相关文章:

c++ - 我们可以忽略 MySQL++ C4275 警告吗?

c++ - 简单的服务器/客户端 boost 示例不起作用

c++ - 在 C++ 中的编译时获取类型名称

c++ - 如何从 sockaddr 获取 IP 地址

c++ - 错误 c2056 : undeclared identifier

c++ - boost asio async_read_some 超时

c++ - 将 boost 日期初始化为公元元年

c++ - STL map中的后序遍历

c++ - 带有 QAbstractItemModel 和上下文菜单的 Qml 2.0 TableView

C# vs C++ 三元运算符