问题标签 [multimap]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 在 C++ 中使用 multimap 类创建数据库类
我正在为一个项目使用 C++。我需要存储一对(字符串,整数)并根据字符串访问它们。multimap 类似乎非常适合。我正在尝试创建自己的类数据库,其中将包括查找与特定字符串关联的所有整数的平均值和计数的方法。但是,我对初始构造函数有点困惑。我的数据库应该在database data();
被调用时创建,但它出现了一个巨大的错误。
这是database.cpp中构造函数的实现
此外,database.h 文件看起来像这样。
错误相当密集,我无法破译它,但是当我运行 g++ database.cpp test.cpp 时就会出现。
编辑:
忘记补充了,谢谢帮助!
生锈的
c++ - 为什么 multimap 允许重复的键值对?
编辑: 请注意,我不是在问为什么 multimap 不能包含重复键。
多重映射允许重复键值对背后的基本原理是什么?(不是键)
这个打印出来的 3 让我有点吃惊,我希望 multimap 表现得像一组pair,所以我期待 2。
直观地说,它与 C++std::map
行为不一致,其中insert
并不总是更改映射(与 相对operator[]
)。
它背后有什么理由,还是只是任意的?
c++ - 插入多图导致段错误
我正在我自己的班级中使用多图进行项目,并且遇到了段错误。这是我的代码中与该问题相关的部分。我真的很感激一些帮助。谢谢。
这是database.h
这是database.cpp
这是test.cpp
非常感谢。它编译并运行到cout << "test1" << endl;
但在下一行出现段错误。
生锈的
list - 在所有推回之后对 STL 列表进行排序还是只使用 Multimap?
我们使用 multimap<int,string> 存储数十万个项目 (>300K),当我们意识到我们需要添加更多数据进行分析时。所以我们创建了一个类,其中包含一些项目和必要的 stl 重写运算符,并使用了 multimap<ourStruct,String>。这工作得很好,并且没有比以前花太多时间(使用一些测试数据),当我们意识到一个 stl <list> 就可以了,只要我们在完成添加所有项目后对其进行排序。令我们惊讶的是,我们发现将所有项目添加到 multimap 仍然很容易超过将所有项目添加到列表然后排序的总时间。
这对我们 EE 类型没有意义,因为我们认为每次插入到 multimap 都必须遍历列表然后将其添加到末尾,而与列表一样,我们只需添加到末尾(通过推回) ,那么希望排序不会花那么长时间。
另一个事实:我们最初在没有对列表进行排序的情况下进行了比较测试,并且很高兴看到使用列表的速度显着提高。然后我们添加了排序,有点惊呆了……
那里的任何 CS 大师都愿意权衡吗?
java - 异构继承对象的Hibernate映射映射
我有下一个数据库模式:
我有下一个对象模型(示意图):
接下来我做了一个到单值映射的映射:
我坚持使用 listMap 的映射。任何有关映射的帮助将不胜感激。
c++ - C++ 中的多图
我正在尝试在 C++ 中使用多图。主要目的是有一个存储多映射指针的映射。
现在,当我尝试插入多图时,我遇到了问题。有人可以告诉我哪里出错了。
问题在于 mm_map_pointer->insert(pair(1, 2)); 有人可以帮忙吗?
c++ - 跟踪不断变化的指针
我有一个运行良好的红黑树算法。当一个节点被插入到树中时, insert() 方法向调用者返回一个指向被插入节点的指针。我将所有此类指针存储在 STL 向量中。
问题是,在RB树的操作中,有时这些指针是无效的。例如,有一个在左/右旋转期间调用的方法,它将节点 A 的值复制到当前节点,然后删除节点 A。好吧,我在那个向量中有一个指向节点 A 的指针,现在它是无效的。
我考虑过一种方法来更新向量中的指针,如下所示,
1)保留一个multimap,它将节点指针映射到保存这些指针的向量索引。
2)在删除一个节点之前,检查这个多图来找到向量中所有会受到影响的点
3)遍历向量并将旧指针更改为新指针
4) 更新多重映射中的键值以反映新指针。
问题是,由于显而易见的原因,您无法更新地图集合的键值。此外,出于复杂性和实施原因,这似乎是一个可怕的解决方案。关于如何完成指针的这种动态更新的任何想法?
c++ - 为什么使用 std::multiset 作为优先级队列比使用 std::priority_queue 更快?
我尝试用 std::priority_queue 替换 std::multiset。但我对速度结果感到失望。算法运行时间增加 50%...
以下是相应的命令:
我对priority_queue 实现的速度感到惊讶,我期待不同的结果(对PQ 更好)......从概念上讲,多重集被用作优先级队列。为什么优先级队列和多重集具有如此不同的性能,即使是-O2
?
十个结果的平均值,MSVS 2010,Win XP,32 位,方法 findAllKNN2()(请参见下文)
什么可能导致这些结果?没有对源代码进行其他更改...感谢您的帮助...
微软实施:
方法:
PQ 实施(较慢,为什么?)
方法:
c++ - C++ 多图插入函数
我正在使用 multimap 来存储值。我只想在插入多图时检查该值是成功还是失败。
我正在尝试使用以下代码
但这给出了标量类型预期的错误。
我想我在这里遗漏了一些愚蠢的东西。我尝试将类型转换为 int 和 bool 但没有奏效。
有什么建议么?
c++ - 如何在std :: multimap中返回严格小于给定键的最大键?
multimap
提供方法lower_bound
和upper_bound
。两者都可以将迭代器返回到键大于期望值的值,并lower_bound
可能产生完全期望的值。
现在我想要一个迭代器来指向一个键严格小于请求的值。如果它是 amap
而不是multimap
,这将相对简单地实现,如下所述:
在 C++ Map 中返回严格小于给定键的最大键。但是在 a 中multimap
,递减迭代器并不能保证它指向一个严格更小的键。所以我需要反复递减,直到找到一个更小的键。不是特别好。
有没有更优雅的方式来做到这一点?
键通常是浮点数。
我很抱歉,事实证明你实际上可以通过一次减量来做到这一点。我只是把它错误地放在我的程序中,那是真正的错误。