我将在 <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 技巧。
最佳答案
简单用例:
#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/