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

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

        对 unordered_map 使用 const 键

        时间:2024-08-14
        • <bdo id='34KKc'></bdo><ul id='34KKc'></ul>
              <tbody id='34KKc'></tbody>
              <legend id='34KKc'><style id='34KKc'><dir id='34KKc'><q id='34KKc'></q></dir></style></legend>
              <i id='34KKc'><tr id='34KKc'><dt id='34KKc'><q id='34KKc'><span id='34KKc'><b id='34KKc'><form id='34KKc'><ins id='34KKc'></ins><ul id='34KKc'></ul><sub id='34KKc'></sub></form><legend id='34KKc'></legend><bdo id='34KKc'><pre id='34KKc'><center id='34KKc'></center></pre></bdo></b><th id='34KKc'></th></span></q></dt></tr></i><div id='34KKc'><tfoot id='34KKc'></tfoot><dl id='34KKc'><fieldset id='34KKc'></fieldset></dl></div>

                  <tfoot id='34KKc'></tfoot>

                  <small id='34KKc'></small><noframes id='34KKc'>

                  本文介绍了对 unordered_map 使用 const 键的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我一直在适当的地方将我的代码从 std::map 切换到 std::unordered_map.使用 std::map,我通常会编写以下内容以确保无法修改密钥:

                  I've been switching my code over from std::map to std::unordered_map where appropriate. With std::map, I typically write the following just to make sure the key cannot be modified:

                  std::map<const std::string, int>
                  

                  坦率地说,我从来没有检查过这个 const 是否有任何价值.这一直与 g++ 一起编译和工作.

                  Frankly, I never checked if this const was of any value. This has always compiled and worked with g++.

                  现在,使用 std::unordered_map,以下内容无法与 g++ 4.5.1 链接.

                  Now, with std::unordered_map, the following fails to link with g++ 4.5.1.

                  std::unordered_map<const std::string, std::string> m;
                  m["foo"] = "bar";
                  

                  出现此链接错误:

                  未定义的符号:"std::hash<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const>::operator()(std::basic_string<char, std::char_traits, std::allocator >) const",引用自:

                  Undefined symbols: "std::hash<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const>::operator()(std::basic_string<char, std::char_traits<char>, std::allocator<char> >) const", referenced from:

                  修复很简单,删除const,但除此之外,在STL中是否有任何关联容器类使用const键类型的点?没有任何方法可以让您获得对任何关联容器的键的引用吗?

                  The fix is simple, to remove const, but besides that, is there even a point in STL with any of the associative container classes to use a const key type? Are there no methods that let you get a reference to the key for any associative container?

                  推荐答案

                  关联容器仅将 (key,value) 对暴露为 std::pair,因此键类型上的额外常量是多余的.

                  The associative containers only expose the (key,value) pair as std::pair<const key_type, mapped_type>, so the additional const on the key type is superfluous.

                  这篇关于对 unordered_map 使用 const 键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:在移动赋值和移动构造函数方面实现 std::swap 下一篇:自己的容器类的 C++ 迭代器和 const_iterator 问题

                  相关文章

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

                    <i id='oRWj2'><tr id='oRWj2'><dt id='oRWj2'><q id='oRWj2'><span id='oRWj2'><b id='oRWj2'><form id='oRWj2'><ins id='oRWj2'></ins><ul id='oRWj2'></ul><sub id='oRWj2'></sub></form><legend id='oRWj2'></legend><bdo id='oRWj2'><pre id='oRWj2'><center id='oRWj2'></center></pre></bdo></b><th id='oRWj2'></th></span></q></dt></tr></i><div id='oRWj2'><tfoot id='oRWj2'></tfoot><dl id='oRWj2'><fieldset id='oRWj2'></fieldset></dl></div>
                  1. <legend id='oRWj2'><style id='oRWj2'><dir id='oRWj2'><q id='oRWj2'></q></dir></style></legend>
                    • <bdo id='oRWj2'></bdo><ul id='oRWj2'></ul>
                      <tfoot id='oRWj2'></tfoot>