在大容器中搜索相应的结构

时间:2019-12-01 04:35:28

标签: c++ struct deque

我有一个大的结构容器

std::deque<MyStruct> dq;

我的结构具有一些字符串类型的属性

struct MyStruct {
    std::string what, when, where;
};

我想找到MyStruct.what =“ SomeString”的所有结构。每当我发现其中之一 我需要在容器中的某个位置找到对应的结构。这个对应的结构 将具有CorrespondingStruct.what =“ SomeOtherString”和CorrespondingStruct.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"
                }
            }
        }
    }
}

是否有更优雅/更简单的方式用C ++编写此代码?

0 个答案:

没有答案