- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我希望 unordered_multimap::equal_range 具有平均恒定的复杂度,但是以下内容并不像预期的那样随 n 线性扩展:
#include <iostream>
#include <tr1/unordered_map>
#include <cstdlib>
using namespace std::tr1;
using namespace std;
int main(){
int n;
cin >> n;
unordered_map<int, int> um;
for(int i=0; i<n; ++i){
um.insert(make_pair(i%100000, i));
pair<unordered_map<int, int>::iterator,unordered_map<int,int>::iterator > t = um.equal_range(i);
}
}
$ g++ testbr.cpp
$ time echo 10000 | ./a.out
real 0m0.065s
user 0m0.060s
sys 0m0.003s
$ time echo 100000 | ./a.out
real 0m4.492s
user 0m4.490s
sys 0m0.003s
有办法解决这个问题吗?
编辑:如果没有 equal_range,它会按预期完美缩放。
此外,如果我插入所有具有相同键 0 的元素(并始终调用 equal_range(0)),它会按预期缩放,即使 boost 文档指出相等范围平均为 O(count(k))...?
最佳答案
这似乎是 libstdc++ 中的一个错误,我在任何地方都找不到错误报告,但是 #include <unordered_map>
并使用 -std=c++11
进行编译我得到了预期的行为。
关于c++ - unordered_multimap::equal_range 慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11519648/
我有以下代码,将结构保存到 boost::ptr_vector 容器中。我现在正在尝试通过 equal_range 为这个容器编写一个简单的搜索函数。我选择该函数是因为我想要一个指向序列元素的指针(如
#include #include #include int main() { boost::property_tree::ptree ptree; const std::str
我正在制作一个自定义容器,它使用 STL 列表容器作为其内部结构。我要添加到此容器中的项目之一是 equal_range。 我的 equal_range 的代码在这里: template typen
多线程访问是否需要同步 pair equal_range (const value_type& val) const; 由于 equal_range 是读取操作,因此可能不需要。请给出意见。 最佳答案
我在 C++ 中使用多重映射的相等范围。在我的例子中,同一个键可以有多个条目——因此是多映射。我想知道返回的迭代器是否会按定义的顺序交付项目,还是留给 STL 的实现器。例如,我将在 multimap
我有以下无序 multimap : std::tr1::unordered_multimap duplicates; 然后我尝试使用以下方法获取键的值 std::pair,std::tr1::unor
cplusplus.com 网站上提供了使用 equal_range 的示例: int main () { std::multimap mymm; mymm.insert(std::p
我希望 unordered_multimap::equal_range 具有平均恒定的复杂度,但是以下内容并不像预期的那样随 n 线性扩展: #include #include #include
在讨论multimap和我的学生一起,我注意到一个小的变化可以减少一些样板文件,我想知道是否有人向标准委员会建议过它,如果是的话,回应是什么。 在相等范围内迭代的规范方法是(取自 cplusplus.
我怎么知道 equal_range 没有找到任何匹配案例? 喜欢: multimap mapdic; pair::iterator,multimap::iterator> ret; // insert
我有这段代码,但我无法理解 equal_range 方法返回迭代器的部分。我知道范围是 pair 对象,里面有两个 multimap 对象,但我不明白的是为什么有 'for (it = range.f
我看到一些旧的、非标准的 equal_range 文档明确调用了严格的弱排序(旧的 SGI 文档)和一些更新的、标准的 equal_range 没有(cppreference、libstdc++ 文档
std::equal_range关于 cppreference.com 的文档显示了一个可能的实现: template std::pair equal_range(ForwardIt firs
我有一个使用 map 的性能敏感函数存储一些数据。 我需要能够使用任何 sub string 查找值 其他一些 string作为 key ,无需创建中间层 string (即,目标是防止仅仅因为我想查
下午好,我发现 std:multimap::equal_range 有时会返回不正确的结果。这可能吗?如果是这样,我的代码或指针的哈希函数中是否有解决方法或错误。谢谢。 这是我的代码的摘录: type
在 C++ prime 5 Ed 第 11 章中。关联容器。 “表 11.7。在关联容器中查找元素的操作”: 据说:“c.equal_range(k) 返回一对迭代器,表示具有键 k 的元素。如果 k
我正在使用 find、equal_range 和我自己的二进制搜索函数进行一些测试,但我很难理解为什么 equal_range 与 find 相比需要这么长的时间。 我有一个排序 vector ,我计
我的理解是,我们不能对无序...容器中元素的顺序做出任何假设(即使它们是通过哈希表实现的)。如果那是正确的,那么 std::unordered_multiset::equal_range() 如何返回
假设我有一个类来保存传感器测量值,我创建了一个 boost 多索引容器,其中包含时间的复合键和每个测量值的 id: namespace { struct ValueUpdateMsg {
下午好,我想知道std::multimap::equal_range 的时间复杂度是多少?它是 Big-O(n) 还是 BIG-0(log n)。我记得读过 std::multimap::erase
我是一名优秀的程序员,十分优秀!