gpt4 book ai didi

c++ - std::map::find 没有找到匹配项,但是如果我通过 begin() 循环到 end() 我会在那里看到匹配项

转载 作者:行者123 更新时间:2023-12-01 14:13:08 25 4
gpt4 key购买 nike

struct chainout {
LONG cl;
std::string cs;
bool operator<(const chainout&o)const {
return cl < o.cl || cs < o.cs;
}
} ;
struct chainin{
std::string tm;
std::string tdi;
short mss;
LONG pinid;
bool operator<(const chainin&o)const {
return mss < o.mss || pinid < o.pinid || tm<o.tm; //no tdi right now it's always empty
}
};
std::map <chainin,chainout> chainmap;
std::map<chainin,chainout>::iterator it;
chainin ci;
chainout co;


string FADEDevicePinInfo::getNetAtPinIdTmTidMss (const LONG p,const string tm, const string tid,const LONG mss){

ci.tm=tm;
// ci.tdi=tid;
ci.tdi="";
ci.mss=(short)mss;
ci.pinid=p;
for (it=chainmap.begin();it!=chainmap.end();it++){
if(it->first.pinid==ci.pinid && it->first.tm==ci.tm&&it->first.mss==ci.mss && it->first.tdi==ci.tdi){
cout << "BDEBUG: found p["; cout<<it->first.pinid; cout<<"] tm["; cout<<it->first.tm.c_str();cout<<"] mss[";cout<<it->first.mss;cout<<"] : ";cout<<it->second.chainSignal.c_str();cout<<endl;
}
}
it=chainmap.find(ci);
if(it == chainmap.end()){
MSG(SEV_T,("no pin data found for pin[%ld]/tm[%s]/tdi[%s]/mss[%ld]",ci.pinid,ci.tm.c_str(),ci.tdi.c_str(),ci.mss));
}
return it->second.cs;
}

这既打印成功找到的行,然后由于 map::find 未返回匹配项而引发 sev_t 错误。我做错了什么?

我通过 < 函数添加了打印语句,但它似乎正确地排序了 map ,当我进行查找时,它似乎找到了正确的 mss/pinid,但随后只看到一个 tm,这是错误的时间。

最佳答案

如评论中所述,您的比较运算符很糟糕。如果您不知道对象应该按什么顺序排序,那么 std::map 或任何其他已排序的容器也不知道。

当你有多个东西要比较时,考虑决定哪个最重要,然后使用 std::tie 来比较它们,如下所示:

#include <string>
#include <iostream>

struct chainout {
int cl;
std::string cs;
bool operator<(const chainout&o)const {
return std::tie(cl, cs) < std::tie(o.cl, o.cs);
}
};

int main(){
chainout a{ 1, "b" };
chainout b{ 2, "a" };
std::cout << (a < b) << std::endl;
std::cout << (b < a) << std::endl;
}

关于c++ - std::map<struct,struct>::find 没有找到匹配项,但是如果我通过 begin() 循环到 end() 我会在那里看到匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62921429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com