如何在"const"成员函数中不出现编译器错误的情况下检查C++映射中的值?
How can I check values in a C++ map without getting compiler errors in a "const" member function?
我有一个比较c++映射中的数据的成员函数。我将成员函数声明为常量:
bool operator == (UnitSet otherSet) const;
但一旦我使用myMap["l"]访问和比较值,我得到关于myMap是常量的编译器错误。在保持const指令的同时,有没有办法解决这个问题?
我知道一个空值是为"l"键创建的,如果它不存在,当我检查它,但这不会改变我的UnitSet的值/行为-也许我在这里太挑剔了,应该只是放弃"const"。做这件事的好方法是什么?
谢谢。
首先,您应该更改您的函数签名以接受otherSet by const引用,因为您不需要复制它,也不会修改它:
bool operator==(const UnitSet& otherSet) const;
然后,而不是使用非const
operator[]
,使用find()
或begin()
/!=end()
/++
将const_iterator
s放入map
s中进行比较。由于find()
, begin()
和对const_iterator
的操作只需要const
访问map
,因此它们可以从const
成员函数中使用。
map<X, Y>::const_iterator i = the_map.find(key);
if (i != the_map.end())
// here, i->first is the key, i->second is the value
else
// key wasn't in the map after all...
遗憾的是,std::map
没有const
对[]
操作符的重载。这是因为每当您访问一个不存在的键时,映射就会为它创建一个元素;如果地图是const
,那是不可能的。因此,没有办法用常数映射来调用它。这与您的UnitSet
类的行为无关。
必须使用myMap.find(TKey)
来获取元素的迭代器,如果找不到它,则返回myMap.end()
。
映射迭代器指向键和值的std::pair
,所以你需要访问它的second
成员来获得你的值(first
是键)。
const UnitSet& reference = myMap.find("l")->second;
相关文章:
- 特定情况下的分段错误
- MSVC 在不知道类型的情况下评估上下文(和错误)
- 如何在没有打印语句的情况下报告用户输入错误
- 在最坏的情况下试验快速排序.它运行良好,但在最坏的情况下发生未知错误.我想
- 如何在不设置 ulimit -n 的情况下解决套接字程序打开太多文件的错误
- 调整向量大小并检索值,这是否正确或在任何情况下都可能导致段错误?
- 如果 return 语句在带括号的循环中,错误可能会到达非 void 函数的末尾,但不会显示在没有括号的循环的情况下
- 我需要在不使用前向声明的情况下相互包含两个头文件,导致"incomplete type"错误
- 在存在错误代码的情况下输出参数与 NRVO
- 对象无法访问其私人数据.错误:在这种情况下私有
- 在这种情况下如何解决?语法错误:在"* "node" ?
- 如何编写一个通用函数,该通用函数在没有任何条件和条件的情况下工作(无论是真实和错误)
- 错误:在 DLSYSM 的情况下,从“void*”到“void (*)()”的转换无效
- 我的调试器说我有一个隔离错误错误,但无法告诉我在哪里,在非常特殊的情况下发生
- 为什么在这种情况下编制动态库错误
- 即使我传递了无效的类型参数,我为什么还能在没有错误的情况下编译此代码
- 呼叫send()关闭申请的情况下没有错误
- 如何在没有错误的情况下展示特殊的中文,韩语,日本角色
- 获取和设置内部数据:返回类型,错误情况下的行为
- 如何处理错误情况下的对象销毁与非错误情况