【问题标题】:Map that can search in both values and keys about the same cost? Symethric map?可以在值和键中搜索相同成本的地图?对称地图?
【发布时间】:2015-11-30 15:12:59
【问题描述】:

我将在<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&lt;T,N&gt;::inverse 是一个可以将映射键视为值的对象,反之亦然。当然,使用简单的searchValue 方法映射也可以解决这个问题。

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

【问题讨论】:

标签: c++ boost


【解决方案1】:

简单的用例:

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

【讨论】:

  • 感谢您的回答。你能解释一下insert({165, "NODE_A"}); 语法是如何工作的吗?我从来没有见过这样的事情。 {165, "NODE_A"} 的评估结果是什么?
猜你喜欢
  • 2015-02-18
  • 1970-01-01
  • 2018-11-13
  • 2011-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多