c++ - std::map 发现在 C++ 中不起作用

标签 c++ string c++11 stl omnet++

<分区>

我使用以下几行创建了一个 HashMap 和一个迭代器:

std::map<const char*,vaLueClass *> myCache;
std::map<const char*,vaLueClass *>::iterator myCacheIterator;

然后我使用下面的行插入到这张 map 中:

myCache[anotherObject->getStringKey()] = new vaLueClass(anotherObj1->getIntAttr(), anotherObj1-->getIntAttr());

然后,每当我尝试使用下面的行搜索此 map 或螺母中是否存在特定字符串的条目时,它总是进入 IF block ,换句话说,它在其中找不到任何条目这张 map 。

myCacheIterator= myCache.find(sampleObject->getstringKey());

注意:此处 sampleObject->getstringKey() 返回之前插入的相同键。

if (myCacheIterator.operator ==(myCache.end())){
   // this block means that no matched entry is found inside the map myCache
}

此外,这是在 C++ 中创建和使用 std::map 的正确方法吗?如果没有,请推荐一个。

此外,我还没有使用关键字 new 来创建 std::map 对象。

最佳答案

std::map 中, 使用小于 operator < 比较键执行搜索时。由于您正在存储 const char*作为键,这意味着查找将比较指针本身而不是它们指向的字符串,因此如果您不传递用于插入映射的确切指针,查找将找不到任何内容。

我认为这里最简单的解决方法是使用 std::strings作为你的 key ,因为 < std::string 上的接线员实际上比较底层文本。这应该可以很快解决您的问题。

关于c++ - std::map 发现在 C++ 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35730615/

相关文章:

c - 在最后一次指定出现 "special"符号 + C 时分割字符串

vb.net - 一个字符串在另一个字符串(文本框)中出现多少次 VB.NET

c++ - 使用 std::uniform_int_distribution 并稍后定义其范围

c# - 无法将 C# 代码移植到实现 IDataErrorInfo 的托管 C++

c++ - std::array 和 lambda

c++ - 使用结构体、函数和指针,我尝试将以下 C++ 代码转换为 C,但它不起作用

regex - 从Perl字符串中删除特定字符的更好方法

每个节点具有恒定时间的 C++ 树

c++ - "array"是 c++11 标准下的关键字吗?

c++ - const auto 和 auto const 如何应用于指针?