我将在<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技巧。
答案 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";
}