std::调用 end() 时出现多映射错误

std::multimap error when calling end()

本文关键字:错误 映射 调用 end std      更新时间:2023-10-16

如何检查多重映射的元素是否存在?
使用此代码:

typedef std::multimap<std::string, std::string> TagVal;
TagVal tv;
//... add values to tv ...
TagVal::const_iterator it = tv.find("abc");
if(it == TagVal::end())    // <--- ERROR
    cerr << "Error";

我收到以下编译时错误:

错误:无法调用成员函数 'std::multimap<...>:::iterator std::multimap<...>::end() ... 没有对象。

平台: Linux, GCC 4.5.1

原因是end不是一个静态方法,它必须在你从中获取迭代器的对象上调用:

if(it == tv.end())
    cerr << "Error";

因为您已将tv初始化为

TagVal tv;

你必须调用 multimap 类的 end() 函数为:

it == tv.end()

因为 end() 是在该对象上调用的,它不是一个静态方法。