unordered_map.find() 匹配不同的键
unordered_map.find() matches on different keys
我正在学习C++。 我有这种方法,它在std::unordered_map
中查找密钥,如果找到密钥,则返回 true,如果未找到,则返回 false。
bool BufferContainer::contains(std::string *file_path) {
EditorBuffer *buf = lookup_buffer(file_path);
if (buf != NULL)
return true;
return false;
}
EditorBuffer* BufferContainer::lookup_buffer(std::string *key) {
auto buffer = buffer_map.find(key);
if (buffer == buffer_map.end())
return NULL;
return buffer->second;
}
我也有一点代码来测试这些方法。它添加一个缓冲区,然后查看其他字符串指针是否匹配。
TEST(BufferContainer, NotContainsBuffer) {
std::string name = "buffer";
std::string name2 = "buffer2";
BufferContainer container;
container.open_buffer(&name);
EXPECT_FALSE(container.contains(&name2));
}
现在的问题是,这个测试失败了。如果我在堆上创建字符串,测试将按预期成功。
TEST(BufferContainer, NotContainsBuffer) {
std::string *name = new std::string("buffer");
std::string *name2 = new std::string("buffer2");
BufferContainer container;
container.open_buffer(name);
EXPECT_FALSE(container.contains(name2));
}
这个问题有什么解决方案吗,还是我做错了什么? 也许我应该将实际字符串存储为键,但在我看来,这会有很多开销。
编辑:我知道我比较了地址,但我无法在最小的工作示例中重现此问题。
这是完整的"程序"。 测试在test/testeditor/test_buffer_container.cpp
. 容器的代码在libeditor/buffer_container.cpp
中。 https://github.com/FlexW/tedit
BufferContainer
使用全局变量作为其映射,不与特定的BufferContainer
实例相关联。一个测试插入的条目在另一个测试中可见。那张全球地图上塞满了悬空的指针。
碰巧的是,测试中的name2
NotContainsBuffer
与先前某些测试插入到映射中的字符串位于同一堆栈位置。
相关文章:
- 为什么映射插入和 map.find() 的单次迭代比插入和 map.find() 的两次单独迭代慢得多
- 从基于迭代器的for循环转换后,如何在map::find()中调用方法
- std::map::find 的效率是否与值的数据大小有关?
- 有没有办法从map::find()获得提升::可选结果?
- Map.find()如何工作,查看输出的组件
- 如何在map::find()函数中引用类元素?
- C++ map::find() in stl
- 为什么要对 map::find 应用不存在的键将返回一个C++中第一个值映射大小的迭代器
- map.find() 找不到键 C++
- std :: map find()返回错误
- 重载 map::key_comp,以便我可以在对象指针的地图上使用 map::find
- c++ STL map::find()
- 与map.find()的操作员无匹配
- map.find和指向向量的指针的怪异行为
- 跟踪节点遍历调用 std::map::find
- 在 c++ stl map.find() 中使用了什么算法
- 在键上使用 map.find() 和 count(),这是一种类对象类型
- GCC 3.4 内部编译器错误与 std::map.find
- C++ map::find char * vs. char []
- 为什么std::map find()没有声明为noexcept