确定 STL 映射是否包含给定键的值的最佳方法是什么?
#include <map>
using namespace std;
struct Bar
{
int i;
};
int main()
{
map<int, Bar> m;
Bar b = {0};
Bar b1 = {1};
m[0] = b;
m[1] = b1;
//Bar b2 = m[2];
map<int, Bar>::iterator iter = m.find(2);
Bar b3 = iter->second;
}
在调试器中检查它,看起来 iter
只是垃圾数据。
如果我取消注释掉这一行:
Bar b2 = m[2]
调试器显示 b2
是 {i = 0}
。 (我猜这意味着使用未定义的索引将返回一个包含所有空/未初始化值的结构?)
这些方法都不是那么好。我真正想要的是这样的界面:
bool getValue(int key, Bar& out)
{
if (map contains value for key)
{
out = map[key];
return true;
}
return false;
}
这些方面的东西是否存在?
原文由 Nick Heiner 发布,翻译遵循 CC BY-SA 4.0 许可协议
没有。使用 stl map 类,您使用
::find()
搜索地图,并将返回的迭代器与std::map::end()
进行比较所以
显然,您可以编写自己的
getValue()
例程(同样在 C++ 中,没有理由使用out
),但我怀疑一旦您掌握了使用的窍门std::map::find()
你不会想浪费你的时间。您的代码也略有错误:
m.find('2');
将在地图中搜索'2'
。 IIRC C++ 编译器会将“2”隐式转换为 int,这会导致“2”的 ASCII 代码的数值不是您想要的。由于您在此示例中的键类型为
int
您希望像这样搜索:m.find(2);