我有一个大的结构容器
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 ++编写此代码?