• <legend id='sUjg7'><style id='sUjg7'><dir id='sUjg7'><q id='sUjg7'></q></dir></style></legend>

        <bdo id='sUjg7'></bdo><ul id='sUjg7'></ul>

        <tfoot id='sUjg7'></tfoot>
      1. <i id='sUjg7'><tr id='sUjg7'><dt id='sUjg7'><q id='sUjg7'><span id='sUjg7'><b id='sUjg7'><form id='sUjg7'><ins id='sUjg7'></ins><ul id='sUjg7'></ul><sub id='sUjg7'></sub></form><legend id='sUjg7'></legend><bdo id='sUjg7'><pre id='sUjg7'><center id='sUjg7'></center></pre></bdo></b><th id='sUjg7'></th></span></q></dt></tr></i><div id='sUjg7'><tfoot id='sUjg7'></tfoot><dl id='sUjg7'><fieldset id='sUjg7'></fieldset></dl></div>
      2. <small id='sUjg7'></small><noframes id='sUjg7'>

        在 C++ 中使用 HashMap 的最佳方法是什么?

        What is the best way to use a HashMap in C++?(在 C++ 中使用 HashMap 的最佳方法是什么?)
        1. <legend id='4wM5o'><style id='4wM5o'><dir id='4wM5o'><q id='4wM5o'></q></dir></style></legend>
          <i id='4wM5o'><tr id='4wM5o'><dt id='4wM5o'><q id='4wM5o'><span id='4wM5o'><b id='4wM5o'><form id='4wM5o'><ins id='4wM5o'></ins><ul id='4wM5o'></ul><sub id='4wM5o'></sub></form><legend id='4wM5o'></legend><bdo id='4wM5o'><pre id='4wM5o'><center id='4wM5o'></center></pre></bdo></b><th id='4wM5o'></th></span></q></dt></tr></i><div id='4wM5o'><tfoot id='4wM5o'></tfoot><dl id='4wM5o'><fieldset id='4wM5o'></fieldset></dl></div>
          <tfoot id='4wM5o'></tfoot>
            <bdo id='4wM5o'></bdo><ul id='4wM5o'></ul>

            <small id='4wM5o'></small><noframes id='4wM5o'>

                    <tbody id='4wM5o'></tbody>
                • 本文介绍了在 C++ 中使用 HashMap 的最佳方法是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我知道 STL 有一个 HashMap API,但我找不到任何好的和详尽的文档以及关于这方面的好例子.

                  任何好的例子都会受到赞赏.

                  解决方案

                  标准库包括有序映射和无序映射(std::mapstd::unordered_map) 容器.在有序映射中,元素按键排序,插入和访问在 O(log n).通常标准库内部使用 红黑树 来制作有序地图.但这只是一个实现细节.在无序映射中,插入和访问在 O(1) 中.它只是哈希表的另一个名称.

                  带有(有序)std::map:

                  的示例

                  #include <map>#include <iostream>#include <cassert>int main(int argc, char **argv){std::map;米;m[你好"] = 23;//检查key是否存在if (m.find("world") != m.end())std::cout <<"地图包含关键世界!
                  ";//取回std::cout <<m["你好"] <<'
                  ';std::map::iterator i = m.find("hello");断言(我!= m.end());std::cout <<键:" <

                  输出:

                  <上一页>23键:你好值:23

                  如果您需要在您的容器中订购并且对 O(log n) 运行时没有问题,那么只需使用 std::map.

                  否则,如果您确实需要哈希表(O(1) 插入/访问),请查看 std::unordered_map,它与 std::map API(例如,在上面的示例中,您只需搜索并将 map 替换为 unordered_map).

                  unordered_map 容器是随 C++11 标准引入的 修订.因此,根据您的编译器,您必须启用 C++11 功能(例如,使用 GCC 4.8 时,您必须将 -std=c++11 添加到 CXXFLAGS).

                  甚至在 C++11 版本之前,GCC 就支持 unordered_map - 在命名空间 std::tr1 中.因此,对于旧的 GCC 编译器,您可以尝试像这样使用它:

                  #include <tr1/unordered_map>std::tr1::unordered_map<std::string, int>米;

                  也是boost的一部分,即可以使用对应的boost-header 以获得更好的可移植性.

                  I know that STL has a HashMap API, but I cannot find any good and thorough documentation with good examples regarding this.

                  Any good examples will be appreciated.

                  解决方案

                  The standard library includes the ordered and the unordered map (std::map and std::unordered_map) containers. In an ordered map the elements are sorted by the key, insert and access is in O(log n). Usually the standard library internally uses red black trees for ordered maps. But this is just an implementation detail. In an unordered map insert and access is in O(1). It is just another name for a hashtable.

                  An example with (ordered) std::map:

                  #include <map>
                  #include <iostream>
                  #include <cassert>
                  
                  int main(int argc, char **argv)
                  {
                    std::map<std::string, int> m;
                    m["hello"] = 23;
                    // check if key is present
                    if (m.find("world") != m.end())
                      std::cout << "map contains key world!
                  ";
                    // retrieve
                    std::cout << m["hello"] << '
                  ';
                    std::map<std::string, int>::iterator i = m.find("hello");
                    assert(i != m.end());
                    std::cout << "Key: " << i->first << " Value: " << i->second << '
                  ';
                    return 0;
                  }
                  

                  Output:

                  23
                  Key: hello Value: 23
                  

                  If you need ordering in your container and are fine with the O(log n) runtime then just use std::map.

                  Otherwise, if you really need a hash-table (O(1) insert/access), check out std::unordered_map, which has a similar to std::map API (e.g. in the above example you just have to search and replace map with unordered_map).

                  The unordered_map container was introduced with the C++11 standard revision. Thus, depending on your compiler, you have to enable C++11 features (e.g. when using GCC 4.8 you have to add -std=c++11 to the CXXFLAGS).

                  Even before the C++11 release GCC supported unordered_map - in the namespace std::tr1. Thus, for old GCC compilers you can try to use it like this:

                  #include <tr1/unordered_map>
                  
                  std::tr1::unordered_map<std::string, int> m;
                  

                  It is also part of boost, i.e. you can use the corresponding boost-header for better portability.

                  这篇关于在 C++ 中使用 HashMap 的最佳方法是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  Unable to access non-const member functions of objects in C++ std::set(无法访问 C++ std::set 中对象的非常量成员函数)
                  How should a size-limited stl-like container be implemented?(应该如何实现大小受限的 stl 类容器?)
                  Constructing std::function argument from lambda(从 lambda 构造 std::function 参数)
                  STL BigInt class implementation(STL BigInt 类实现)
                  Sync is unreliable using std::atomic and std::condition_variable(使用 std::atomic 和 std::condition_variable 同步不可靠)
                  Move list element to the end in STL(在 STL 中将列表元素移动到末尾)
                      <bdo id='lar0l'></bdo><ul id='lar0l'></ul>

                      1. <tfoot id='lar0l'></tfoot>

                          • <legend id='lar0l'><style id='lar0l'><dir id='lar0l'><q id='lar0l'></q></dir></style></legend>

                            <small id='lar0l'></small><noframes id='lar0l'>

                              <tbody id='lar0l'></tbody>
                            <i id='lar0l'><tr id='lar0l'><dt id='lar0l'><q id='lar0l'><span id='lar0l'><b id='lar0l'><form id='lar0l'><ins id='lar0l'></ins><ul id='lar0l'></ul><sub id='lar0l'></sub></form><legend id='lar0l'></legend><bdo id='lar0l'><pre id='lar0l'><center id='lar0l'></center></pre></bdo></b><th id='lar0l'></th></span></q></dt></tr></i><div id='lar0l'><tfoot id='lar0l'></tfoot><dl id='lar0l'><fieldset id='lar0l'></fieldset></dl></div>