C++ 同时在struct vector中查找多个元素
我有一个类似的结构C++ 同时在struct vector中查找多个元素,c++,struct,C++,Struct,我有一个类似的结构 struct Event { std::string name; int date; int number; int event; }; 接下来,将解析一个文本文件,该文件有三列,以“:”分隔,使用类似ifstream的 while (getline(EventsFile, line)) { std::vector<std::string> columns = split(line,':');
struct Event {
std::string name;
int date;
int number;
int event;
};
接下来,将解析一个文本文件,该文件有三列,以“:”分隔,使用类似ifstream的
while (getline(EventsFile, line))
{
std::vector<std::string> columns = split(line,':');
Event events_;
events_.name = "Test";
events_.date = std::stoi(columns[0]);
events_.number = std::stoi(columns[1]);
events_.event = std::stof(columns[2]);
EventList.push_back(events_);
}
但这不起作用……有什么帮助吗?链表的速度很慢,除非您需要在结束前插入/删除链表,否则应避免使用。向量可能会更快,但无法消除对每个元素执行线性搜索的事实。您可以使用适当的键将元素存储在
std::map
中,这样会更有效,或者使用排序向量并执行二进制搜索。到底什么不起作用?您的操作符()不正确。它永远不会返回错误。(您应该会得到一个编译器警告。)如果if
,只需返回bool表达式return run==a.run&&date==b.date&&event==c.event
我假设您正在将其与std::find_if
一起使用?我得到的结果类似于错误:请求“a”中的成员“run”,这是非类类型“const int”
,对于其他定义的参数也是如此
for (const Event & m: EventList)
{
if (m.date == info1 && m.number==info2 && m.event == info3)
cout<<"=========================================== >>>>>>>>>>>> "<<m.name<<" "<<m.run<<" "<<m.lumi<<" "<<m.eventrn<<endl;
}
struct find_element
{
int run;
int date;
int event;
find_element(int run,int date,int event) : run(run),date(date),event(event) {}
bool operator () ( const int& a , const int &b, const int &c)
{
if (run==a.run && date==b.date && event == c.event)
return true;
}
};