可以搜索相同成本的值和键的地图? Symethric地图?

时间:2015-11-30 15:13:00

标签: c++ boost

我将在<unsigned long, const char*>地图中拥有最多50个条目。原因是协议我在初始握手后使用数字引用字符串名称 - 我假设服务器上必须存在类似的地图。

我想要的是一个可以搜索密钥和值的地图(两者都保证是唯一的并绑定在一起),具有相同的代码复杂性和性能成本。一个想法是:

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是一个可以将地图键视为值的对象,反之亦然。当然,使用简单searchValue方法的地图也可以解决这个问题。

我要求这个,因为我将不断地将数字转换为字符串,反之亦然,没有任何可靠的数字生成系统,唯一的方法就是记住所有的关系。如果数字是序数的话,可以使用std::vector,而这种情况并非总是如此。我愿意使用任何提升功能以及C ++ 11技巧。

1 个答案:

答案 0 :(得分:1)

简单用例:

<强> Live On Coliru

plt.hist2d

打印

#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";
}