标签: bimap

Racket中的双向HashMap

Racket是否有双向散列映射?

也就是说,哈希映射可以在恒定时间内,给一个键并查找值,或者给出值并查找键?我很高兴看起来像这样的API:

#lang racket

(define my-map (bidirectional-hash '(key1 val1) '(key2 val2)))
(bidirectional-hash-ref my-map 'key 'key1) ; => val1
(bidirectional-hash-ref my-map 'val 'val2) ; => key2
Run Code Online (Sandbox Code Playgroud)

符号keyval告诉哈希映射它被赋予val,并寻找一个键,或给一个键,并寻找一个val.在这两种情况下,我希望在恒定的O(1)时间内完成.

我知道你可以通过使用两个彼此反转的哈希表来实现这一点,但我想要一个构建在Racket(或现有库)中的结构.

bimap racket

7
推荐指数
1
解决办法
141
查看次数

枚举的boost :: bimap

我正在尝试为C++中的枚举创建一个简单的双向查找工具.我的单向查找工作正常......

enum MyEnum
{ 
    One, 
    Two, 
    Three 
};

const boost::unordered_map<MyEnum,std::string> MyEnumMap = map_list_of
    (One, "One")
    (Two, "Two")
    (Three, "Three");
Run Code Online (Sandbox Code Playgroud)

然后看看

MyEnumMap.at(One)
Run Code Online (Sandbox Code Playgroud)

这有效,但它只允许基于密钥的查找.我想使用一个双向查找容器,如boost:bimap,以便根据值和键进行简单的反向查找.尽管如此,map_list_of似乎与boost :: bimap不兼容.

首先,我是否还应该使用带有boost :: bimap的map_list_of,还是需要另一种类型?
这些地图都是基本的(枚举,字符串)类型.

第二,有没有一种方法我仍然可以像上面那样以简单的方式将地图定义为const?我试图让这个更容易更新和维护,而不会进入太多额外的typedef等.非常感谢您的见解.

c++ boost map bimap

6
推荐指数
1
解决办法
1856
查看次数

没有Boost的现代C++中的bimap实现

我承认这个问题在之前已经被问到,但是现在是4年前,我敢于要求更新:

我需要一种方法来将一个元组/对添加到容器中并有效地搜索左侧和右侧元素.

升压具有bimapmulti_index该做的正是我想要的,但我不知道什么是纯现代C++推荐的替代方案- 11/14如果你不希望引入的依赖性提高(无论何种原因).

链接中的一个答案表明不需要s.th. 由于透明的比较器,更像是一个bimap .接受的答案表明将std::maps与key1- > key2key2- > 组合在一起的实现key1.

我真的不知道透明比较器如何帮助我,我只是好奇是否有一些这是你应该怎么做以及为什么 - 解决方案.你能提供一些提示/链接吗?

c++ boost bimap c++11 c++14

6
推荐指数
1
解决办法
1955
查看次数

Java:实例化Google Collection的HashBiMap

我正在使用Eclipse,并且我已经添加了google-collect.1.0-rc2.jar作为引用的库.但不知怎的,这仍然无效:

import com.google.common.collect.HashBiMap;

public class Odp {        
    //...

    HashBiMap<Character, Integer> charOcc =
        HashBiMap<Character, Integer>.create();    
}
Run Code Online (Sandbox Code Playgroud)

Eclipse给出以下错误:

此行有多个标记

  • HashBiMap无法解析
  • Character.Integer无法解析
  • 令牌",","."上的语法错误.预期
  • 令牌"."上的语法错误,删除此令牌
  • 对于类Odp,方法create()未定义

我究竟做错了什么?

其他谷歌的东西,如乔纳,工作得很好.(但乔伊纳不是通用的.)

java bimap guava

5
推荐指数
1
解决办法
2834
查看次数

使用带有boost :: bimap的自定义分配器

我正在努力提高程序的性能,该程序同时使用Boost Graph Library和boost::bimap.分析显示大部分时间都花在内存分配和释放上.使adjacency_list图库的类boost::fast_pool_allocator显着使用改进的性能.剩下的大部分内存分配都会出现boost::bimap,所以我想尝试在那里使用自定义分配器.该文件说,你可以指定分配为bimap中的最后一个模板参数,但它并没有说什么类型的模板参数分配器本身应该是.例如,对于类型XY,在

boost::bimap<set_of<X>, set_of<Y>, boost::fast_pool_allocator<Z> >
Run Code Online (Sandbox Code Playgroud)

应该填写什么Z

c++ boost bimap memory-pool

5
推荐指数
1
解决办法
460
查看次数

我们有MultiBiMap吗?

就像我们现在一样,有BiMap和multiMap的概念,但有一个multiBiMap吗?所以我的意思是什么呢.在multiMap中,您在K和V之间具有一对多关系,单个键可以与多个值相关联,因此也就是名称.在双向地图中你有K,V对是双向的意思,你也可以获得V,K关系.就像有两个常规地图但同步.我需要一个双向多图,你可以将这两个概念结合起来.

java hashmap multimap bimap

5
推荐指数
1
解决办法
3295
查看次数

将 Bimap 提升为 insert_or_modify

STL映射“[]”运算符可以插入新条目或修改现有条目。

map<string, string> myMap;
myMap["key1"] = "value1";
myMap["key1"] = "value2";
Run Code Online (Sandbox Code Playgroud)

我正在用boost::bimap重写一些由STL映射实现的代码。有没有简单的方法来保持STL“[]”行为?我发现我必须编写以下 7 行代码来替换原来的 STL 地图代码(1 行!)。

bimap<string, string>::left_iterator itr = myBimap.left.find("key1");
if (itr != myBimap.left.end()) {
    myBimap.left.replace_data(itr, "value2");
} 
else {
    myBimap.insert(bimap<string, string>::value_type("key1", "value2"));
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有像 boost::bimap::insert_or_modify() 这样的实用函数。

c++ boost bimap

5
推荐指数
1
解决办法
2574
查看次数

将std :: map复制/插入boost :: bimap

我尝试将std :: map的元素复制到boost :: bimap中.我无法让std :: copy工作(boost文档似乎表明bimap应该与std :: copy兼容).

我尝试了以下方法:

std::map<K, T> curves;

boost::bimap<boost::bimaps::set_of<K>,
    boost::bimaps::multiset_of<T>> m_curves;

... // some initialisation of curves

std::copy(curves.begin(), curves.end(), std::inserter(m_curves, 
    m_curves.end())); // This fails

m_curves.insert(curves.begin(), curves.end()); // This fails too !
Run Code Online (Sandbox Code Playgroud)

错误消息很长,从以下开始:

1>C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\xutility(2266) : error C2679: binary '=' : no operator found which takes a right-hand operand of type 'const std::pair<_Ty1,_Ty2>' (or there is no acceptable conversion)
1>        with
1>        [
1>            _Ty1=const K,
1>            _Ty2=std::string
1>        ]
1>        C:\Program …
Run Code Online (Sandbox Code Playgroud)

c++ boost copy bimap

4
推荐指数
1
解决办法
709
查看次数

在HashBiMap中改变值是否安全?

在我的代码中,我想要一个

HashBiMap<T1, HashSet<T2>> bimap;
Run Code Online (Sandbox Code Playgroud)

在bimap中改变值是否可以?当我使用时bimap.inverse(),它hashCode()是否会导致与包含可变键的HashMap相关的相同问题?

java hashcode bimap guava

4
推荐指数
1
解决办法
339
查看次数

"容器中没有原语"规则是否适用于数组?

我最近一直试图实现一个简单的遗传算法.我需要使用一个存储成对的可逆地图(Character,4 bits).我选择了番石榴BiMap来完成这项任务.但是由于int我选择用于位存储的数组,测试不会通过.

int[]一种原始类型?使用一个VectorList一个整数是否适合这项任务?

java arrays bimap guava

3
推荐指数
1
解决办法
76
查看次数

标签 统计

bimap ×10

boost ×5

c++ ×5

java ×4

guava ×3

arrays ×1

c++11 ×1

c++14 ×1

copy ×1

hashcode ×1

hashmap ×1

map ×1

memory-pool ×1

multimap ×1

racket ×1