multimap vs map with set
multimap vs map with set
我想知道哪一个更有效率。
std::map< String, std::set<int> >
或
std::multimap< String, int >
编辑:我不打算用这些地图做什么不寻常的事情。标准的插入、删除、修改、查找。每个集或多键字符串的大小不应超过100。
我认为这是实现相关的,但(非)有根据的猜测:
在实践中,它取决于您将在multimap
或std::set
中保留的整数的数量。multimap
很可能在对键进行log(n)搜索后对值进行线性搜索。如果您有大量的整数值,那么对键进行log(n)次搜索,然后对值进行log(n)次搜索,可能会稍微快一些。
然而,就效率而言,使用string
键在map
或multimap
中存储任何东西几乎肯定会超过这两种情况的差异。
如下所述,multimap
可能更容易使用,更易于维护,从而具有明显的优势。
无论multimap是否存在,"set"选项都将消除重复的键+值对。
它们实际上并不相等。multimap<X,Y>
允许存储重复的键值对,而map<T, set<X>>
不允许。
multimap<int, int> m;
m.insert(make_pair(2, 3));
m.insert(make_pair(2, 3)); // This changes the size of m!
与
map<int, set<int>> m;
m[2].insert(3);
m[2].insert(3); // This does nothing.
所以我会使用set方法,除非你需要重复的键值对。语法也更好。我希望性能和内存使用的差异不是那么大。
如果到目前为止你对这些答案不满意(不是说你不满意),而我绝对是被迫回答的,我也会给出我的有根据的"猜测":
要插入,multimap似乎更"有效"。使用映射方法,首先必须检索,然后对集合执行操作。要删除/检索,map似乎更"高效"。
我不能肯定地说,但考虑到multimap被设计成另一个是表达式的,它应该更好地具体使用multimap,它更有意义,它也有成员函数与multimap一起工作作为一个概念,这些函数使用其他方法会有点时髦。
std::multimap<String,>最有可能更节省内存
相关文章:
- 为什么我无法更改"set<set>"循环中的值<int>
- Problems with std::cin.fail()
- 对于set上的循环-获取next元素迭代器
- 在声明中合并两个常量"std::set"(不是在运行时)
- 有没有办法对std::unordered_set、std::unrdered_map、std::set、std::map
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 将 std::set 与基于键的比较器一起使用
- 如何使用set实现无序数据结构?
- 这对"With a stackless coroutine, only the top-level routine may be suspended."意味着什么
- 使用运算符调用 void 函数时出错<set>
- Boost.TEST with CLion: "Test framework quit unexpectedly"
- 避免碎片化的ClientHellos with OpenSSL (DTLS)
- Issues with Win32 ReadProcessMemory API
- 最适合"set with class member as key"的数据结构?
- C++ std::set ordering not working with customer class*
- std::set with std::p air语言 - 如何为元素编写比较器
- 使用STD和c++从set with constant time中删除一个值
- alternative to BOOST_FOREACH with std::set?
- C++ std::set::erase with std::remove_if
- multimap vs map with set