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"
                }
            }
        }
    }
}