标签: multimap

C++:STL multimap.equal_range()

我有这个代码,我无法理解equal_range方法返回迭代器的部分.我知道范围是配对对象里面有两个多图对象,但是我没有得到,这就是为什么'for (it = range.first; it != range.second; ++it)'- 这究竟是 什么意思?

// multmap.cpp -- use a multimap
#include <iostream>
#include <string>
#include <map>
#include <algorithm>

typedef int KeyType;
typedef std::pair<const KeyType, std::string> Pair;
typedef std::multimap<KeyType, std::string> MapCode;

int main()
{
using namespace std;
MapCode codes;
codes.insert(Pair(415, "San Francisco"));
codes.insert(Pair(510, "Oakland"));
codes.insert(Pair(718, "Brooklyn"));
 codes.insert(Pair(718, "Staten Island"));
  codes.insert(Pair(415, "San Rafael"));
  codes.insert(Pair(510, "Berkeley"));

  cout << "Number of cities with area code 415: "
    << codes.count(415) << endl;
  cout …
Run Code Online (Sandbox Code Playgroud)

c++ stl multimap

10
推荐指数
2
解决办法
1万
查看次数

杰克逊JSON - 反编译Commons MultiMap

我想使用JSON序列化和反序列化MultiMap(Apache Commons 4).

要测试的代码片段:

MultiMap<String, String> map = new MultiValueMap<>();
map.put("Key 1", "Val 11");
map.put("Key 1", "Val 12");
map.put("Key 2", "Val 21");
map.put("Key 2", "Val 22");

ObjectMapper mapper = new ObjectMapper();
String jsonString = mapper.writeValueAsString(map);
MultiMap<String, String> deserializedMap = mapper.readValue(jsonString, MultiValueMap.class);
Run Code Online (Sandbox Code Playgroud)

序列化工作正常,并产生我期望的格式:

{"Key 1":["Val 11","Val 12"],"Key 2":["Val 21","Val 22"]}
Run Code Online (Sandbox Code Playgroud)

不幸的是,反序列化产生的结果不是它看起来的样子:在反序列化之后,Multimap在ArrayList中包含一个用于键值的ArrayList,而不是包含值的键的单个ArrayList.

由于put()MultiMap实现了Map接口,因此调用多映射的方法来添加在json字符串中找到的数组,从而产生了这个结果.

如果将新值放入非现有键,MultiMap实现本身将再次创建一个ArrayList.

有没有办法绕过这个?

谢谢您的帮助!

java serialization json multimap

10
推荐指数
1
解决办法
6584
查看次数

Hibernate中的Multimap

我需要一个将条目存储为键值对的集合(所以我可以通过键查找值),但是我需要一个允许多个值使用hibernate共享同一个键的集合

hibernate multimap

9
推荐指数
1
解决办法
4727
查看次数

使用Google Collections创建弱多图

是否有相当于MultiMaps的漂亮MapMaker?目前我创建这样的缓存:

    public static Map<Session,List<Person>> personCache = new MapMaker().weakKeys().makeMap();
Run Code Online (Sandbox Code Playgroud)

MultiMap的重点是避免嵌套的List值.有没有办法用弱键构造多图?

java weak-references multimap guava

9
推荐指数
1
解决办法
1982
查看次数

Guava MultiMap和ConcurrentModificationException

我不明白为什么在迭代这个时我得到一个ConcurrentModificationException multimap.我读了以下条目,但我不确定我是否理解了整个事情.我试图添加一个synchronized块.但我怀疑的是与什么同步,何时.

multimap是一个字段,创建如下:

private Multimap<GenericEvent, Command> eventMultiMap =   
   Multimaps.synchronizedMultimap(HashMultimap.<GenericEvent, Command> create());
Run Code Online (Sandbox Code Playgroud)

并像这样使用:

eventMultiMap.put(event, command);
Run Code Online (Sandbox Code Playgroud)

并且像这样(我试图在地图上同步这部分,但没有成功)

for (Entry<GenericEvent, Command> entry : eventMultiMap.entries()) {
    if (entry.getValue().equals(command)) {
        eventMultiMap.remove(entry.getKey(), entry.getValue());
        nbRemoved++;
    }
}
Run Code Online (Sandbox Code Playgroud)

java concurrency multimap guava concurrentmodification

9
推荐指数
3
解决办法
6766
查看次数

带有HashMultiset的Multimap用于值

我正在尝试为每个键创建一个(基于散列的)Multimap,其中包含一个(基于散列的)Multiset值.看例子:

Multimap<Object, Object> mmap = Multimaps.newMultimap(
    Maps.<Object, Collection<Object>>newHashMap(), 
    new Supplier<Collection<Object>>() {
  public Collection<Object> get() {
    return HashMultiset.create();
  }
});
mmap.put("1", "2");
Run Code Online (Sandbox Code Playgroud)

但是之后,

System.out.println(mmap.get("1") instanceof Multiset<?>); 
//false, the returned collection is not a HashMultiset,
//but a (private) WrappedCollection
Run Code Online (Sandbox Code Playgroud)

所以我似乎无法访问我创建的多重集?我希望能够将其作为Multiset(包含在Multisets.unmodifiableMultiset()中)返回.我不希望每次都将它复制到新的Multiset中.除了切换回Map<K, Multiset<V>>代码并添加我Multimap想要消除的复杂性之外,我还有其他选择吗?

java collections multimap guava

9
推荐指数
1
解决办法
2468
查看次数

为什么使用std :: multiset作为优先级队列比使用std :: priority_queue更快?

我尝试用std :: priority_queue替换std :: multiset。但是我对速度结果感到失望。该算法的运行时间增加了50%...

以下是相应的命令:

top() = begin();
pop() = erase(knn.begin());
push() = insert();
Run Code Online (Sandbox Code Playgroud)

我对priority_queue实现的速度感到惊讶,我预期会有不同的结果(对于PQ更好)...从概念上讲,多集被用作优先级队列。为什么优先级队列和多重集即使在情况下也具有如此不同的性能-O2

十个结果的平均值,MSVS 2010,Win XP,32位,方法findAllKNN2()(请参见下面的内容)

MS
N           time [s]
100 000     0.5
1 000 000   8

PQ
N           time [s]
100 000     0.8
1 000 000   12
Run Code Online (Sandbox Code Playgroud)

什么会导致这些结果?尚未对源代码进行其他更改...感谢您的帮助...

MS实施:

template <typename Point>
struct TKDNodePriority
{
    KDNode <Point> *node;
    typename Point::Type priority;

    TKDNodePriority() : node ( NULL ), priority ( 0 ) {}
    TKDNodePriority ( KDNode <Point> *node_, typename Point::Type priority_ ) : node ( …
Run Code Online (Sandbox Code Playgroud)

c++ performance priority-queue multimap multiset

9
推荐指数
3
解决办法
3609
查看次数

我可以依赖无序地图的顺序吗?

我有一个std::unordered_multimap,我想获得特定键的最后插入元素.我观察到了这种行为:

#include <iostream>
#include <string>
#include <unordered_map>

using namespace std;

int main() {
    unordered_multimap<string, string> mmap;

    mmap.emplace("a", "first");
    mmap.emplace("a", "second");
    mmap.emplace("a", "last");
    mmap.emplace("b", "1");
    mmap.emplace("b", "2");
    mmap.emplace("b", "3");

    auto last_a = mmap.equal_range("a").first;
    auto last_b = mmap.equal_range("b").first;

    cout << last_a->second << endl;
    cout << last_b->second << endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

此代码输出:

last
3
Run Code Online (Sandbox Code Playgroud)

这至少是GCC,我想要的行为.我可以依靠吗?标准是否对std::unordered_multimap商店的订单说了什么?如果没有,最好的选择是什么?

c++ gcc multimap language-lawyer c++11

9
推荐指数
1
解决办法
365
查看次数

提示错误时的emplace_hint性能

我试图确定是否emplace_hint应该使用键插入一个键multimap(而不是常规键emplace).我已经计算了早期操作中键的范围(在同一个键上):

range = multimap.equal_range(key); 
Run Code Online (Sandbox Code Playgroud)

我应该使用range.first,range.second或者没有任何提示来插入密钥,值对吗?如果范围是空的怎么办?

c++ multimap

9
推荐指数
1
解决办法
395
查看次数

Android Room Multimap 相同列名称的问题

正如官方文档中所述,Android Room 数据库最好使用 Multimap 返回类型。
对于下一个非常简单的示例,它无法正常工作!

@Entity
data class User(@PrimaryKey(autoGenerate = true) val _id: Long = 0, val name: String)

@Entity
data class Book(@PrimaryKey(autoGenerate = true) val _id: Long = 0, val bookName: String, val userId: Long)
Run Code Online (Sandbox Code Playgroud)

(我相信很多开发人员的_id表中都有主键)

现在,在 Dao 类中:

@Query(
    "SELECT * FROM user " +
        "JOIN book ON user._id = book.userId"
)
fun allUserBooks(): Flow<Map<User, List<Book>>>
Run Code Online (Sandbox Code Playgroud)

数据库表:
在此输入图像描述

在此输入图像描述

最后,当我运行上述查询时,我得到的结果如下: 在此输入图像描述

虽然它应该有 2 个条目,因为相应的表中有 2 个用户。

附言。我目前使用的是最新的 Room 版本,版本 2.4.0-beta02

聚苯硫醚。问题在于 UserDao_Impl.java 的生成方式: 在此输入图像描述
所有_id …

multimap android-room

9
推荐指数
1
解决办法
1570
查看次数