使用 find 重新分级 STL Map 检查条目

发布于 2024-09-30 07:40:27 字数 1091 浏览 0 评论 0原文

我正在跟踪程序

typedef std::map<std::string, CRTSLogManager*> FileNameToStorageClass;
FileNameToStorageClass  m_mapFileNameToLogStorage;
map<string, void*>::iterator iter;
iter =m_mapFileNameToLogStorage.find(cFileName);

if(iter == m_mapFileNameToLogStorage.end())
{
   typedef std::pair<std::string, CRTSLogManager*> FileNameToStorageClassPair;
   string strFilename = "MyFile";
   CRTSLogManager *pLogManager = new CRTSLogManager();
   m_mapFileNameToLogStorage.insert(
      FileNameToStorageClassPair(strFilename, pLogManager));
}

,在编译时遇到以下错误,该错误与 == 检查 if 条件有关。

“iter ==”中的“operator==”不匹配 ((CRTSLogManagerReal*)this)->CRTSLogManagerReal::m_mapFileNameToLogStorage.std::map, std::分配器>, CRTSLogManager*, 标准::更少, std::分配器> >, std::分配器, std::分配器>, CRTSLogManager*> >::.std::_Tree<_Traits>::end 与 _Traits = std::_Tmap_traits, std::分配器>, CRTSLogManager*, 标准::更少, std::分配器> >, std::分配器, std::分配器>, CRTSLogManager*> >, 假>'

I am following program

typedef std::map<std::string, CRTSLogManager*> FileNameToStorageClass;
FileNameToStorageClass  m_mapFileNameToLogStorage;
map<string, void*>::iterator iter;
iter =m_mapFileNameToLogStorage.find(cFileName);

if(iter == m_mapFileNameToLogStorage.end())
{
   typedef std::pair<std::string, CRTSLogManager*> FileNameToStorageClassPair;
   string strFilename = "MyFile";
   CRTSLogManager *pLogManager = new CRTSLogManager();
   m_mapFileNameToLogStorage.insert(
      FileNameToStorageClassPair(strFilename, pLogManager));
}

I am getting following error while compiling which is related to == check in if condition.

no match for 'operator==' in 'iter ==
((CRTSLogManagerReal*)this)->CRTSLogManagerReal::m_mapFileNameToLogStorage.std::map,
std::allocator >,
CRTSLogManager*,
std::less,
std::allocator > >,
std::allocator,
std::allocator >,
CRTSLogManager*> >::.std::_Tree<_Traits>::end
with _Traits =
std::_Tmap_traits,
std::allocator >,
CRTSLogManager*,
std::less,
std::allocator > >,
std::allocator,
std::allocator >,
CRTSLogManager*> >, false>'

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

风筝有风,海豚有海 2024-10-07 07:40:27

您正在声明 a 的迭代器

std::map <string, void *>

,但试图与 a 的迭代器进行比较,

std::map< std::string, CRTSLogManager*>

它们不兼容。

You are declaring an iterator for a

std::map <string, void *>

but you are trying to compare against an iterator for a

std::map< std::string, CRTSLogManager*>

They are not compatible.

尹雨沫 2024-10-07 07:40:27

iter 不应该声明为吗

FileNameToStorageClass::iterator iter;

Shouldn't iter be declared as

FileNameToStorageClass::iterator iter;

?

心病无药医 2024-10-07 07:40:27

std::mapmap 是不同的类型,并且不具有相同的迭代器类型,因此您无法比较这些迭代器的两个实例。如果您要使用 typedef,则应该一致地使用它们:

FileNameToStorageClass::iterator iter;

std::map<std::string, CRTSLogManager*> and map<string, void*> are different types and do not have the same iterator type, so you cannot compare two instances of those iterators. If you're going to use typedefs, you should use them consistently:

FileNameToStorageClass::iterator iter;
ぽ尐不点ル 2024-10-07 07:40:27

也许您缺少像 std::map 这样的模板化类的类型名参数?

您的键/值对的类或数据类型是什么?
似乎您想要 std::string 作为键,并将指向 CRTSLogManager 对象的指针作为值。

在这种情况下,您的 typedef 别名 FileNameToStorageClass 可能应该是:

typedef std::map<std::string, CRTSLogManager*> FileNameToStorageClass;

但是,您发布的代码似乎根本不是一个工作程序。
例如,这一行:

string strFilename = "MyFile"

除非您定义了自己的类“string”或加载了 std 命名空间,否则该行将不起作用。我假设您正在使用 std::string。

Perhaps you are missing a typename arguments for templatized class like std::map?

What is the class or data type for your key/value pair?
Seems like you want std::string for your key and pointer to CRTSLogManager object as the value.

In that case, your typedef alias FileNameToStorageClass should probably be:

typedef std::map<std::string, CRTSLogManager*> FileNameToStorageClass;

However, the code you posted does not seem to be a working program at all.
For example, this line:

string strFilename = "MyFile"

won't work unless you defined your own class "string" or have std namespace loaded. I am assuming you are using std::string.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文