C++ 在大型容器中搜索相应的结构
我有一个大容器的结构C++ 在大型容器中搜索相应的结构,c++,struct,deque,C++,Struct,Deque,我有一个大容器的结构 std::deque<MyStruct> dq; 我想找到MyStruct.what=“SomeString”所针对的所有结构。每当我找到其中一个, 我需要在容器中的某个地方找到相应的结构。这个对应的结构 将具有相应的struct.what=“SomeOtherString”和相应的struct.when=MyStruct.when。 相应的结构可以在原始结构之前或之后。只有1个对应的结构 对于每个原始结构 当找到相应的结构时,我想找到第三个结构,它将在下面稍
std::deque<MyStruct> dq;
我想找到MyStruct.what=“SomeString”所针对的所有结构。每当我找到其中一个,
我需要在容器中的某个地方找到相应的结构。这个对应的结构
将具有相应的struct.what=“SomeOtherString”和相应的struct.when=MyStruct.when。
相应的结构可以在原始结构之前或之后。只有1个对应的结构
对于每个原始结构
当找到相应的结构时,我想找到第三个结构,它将在下面稍远的地方,
以及哪个FinalStruct.what=“DesiredString”。
当我最终找到这个结构时,我想得到它的索引,这样我就可以进行一些操作和重新排列
目前,除了一堆讨厌的嵌套循环之外,我想不出任何方法来实现这一点:
findCorrespondingIndex(std::deque<MyStruct>& dq) {
for (auto it = dq.rbegin(); it != dq.rend(); ++it) {
if ((*it).what == "SomeString") {
for (auto itt = dq.rbegin(); itt != dq.rend(); ++itt) {
if ((*itt).what == "SomeOtherString" && (*itt).when == (*it).when) {
int index = std::distance(dq.begin(), itt) - 1;
while (dq[index].what != "DesiredString") index--;
// do stuff
continue; // break out of inner for loop to look for the next MyStruct.what = "SomeString"
}
}
}
}
}
查找相关索引(std::deque&dq){
对于(自动it=dq.rbegin();it!=dq.rend();++it){
if((*it).what==“SomeString”){
对于(自动itt=dq.rbegin();itt!=dq.rend();++itt){
如果((*itt).what==“SomeOtherString”&(*itt).when==(*it.when){
int index=std::distance(dq.begin(),itt)-1;
而(dq[index].what!=“DesiredString”)索引--;
//做事
continue;//中断内部for循环以查找下一个MyStruct.what=“SomeString”
}
}
}
}
}
在C++中有一种更优雅/更简单的方式来写这个吗?< /p>我不知道你是否强迫使用DEQE,但是如果你可以自由选择容器,请查看向量和列表@ SAMNII的链接,数据是作为DeQE提供的,但是我想我可以根据需要将内容复制到不同的容器。这个链接看起来很有希望,我会仔细看看。
findCorrespondingIndex(std::deque<MyStruct>& dq) {
for (auto it = dq.rbegin(); it != dq.rend(); ++it) {
if ((*it).what == "SomeString") {
for (auto itt = dq.rbegin(); itt != dq.rend(); ++itt) {
if ((*itt).what == "SomeOtherString" && (*itt).when == (*it).when) {
int index = std::distance(dq.begin(), itt) - 1;
while (dq[index].what != "DesiredString") index--;
// do stuff
continue; // break out of inner for loop to look for the next MyStruct.what = "SomeString"
}
}
}
}
}