我已经编写了以下代码,以便从std::vector
中过滤掉一些不好的元素:
#include <iostream>
#include <vector>
#include <algorithm>
typedef struct mystruct {
int id;
std::string name;
};
int main()
{
std::vector<mystruct> all_items = {{151, "test1"}, {154, "test4"}, {152, "test2"}, {151, "test1"}, {151, "test1"}, {153, "test3"}};
std::vector<int> bad_ids = {151, 152};
std::vector<mystruct> filter_items;
for (const auto& item : all_items) {
if ( std::find(bad_ids.begin(), bad_ids.end(), item.id) != bad_ids.end() ) {
std::cout << "id: " << item.id << " is bad" << std::endl;
} else {
std::cout << "id: " << item.id << " is good item" << std::endl;
filter_items.emplace_back(item);
}
}
for (auto f : filter_items) {
std::cout << "Good item: " << f.id << std::endl;
}
}
有没有更高效的方法?能否在这里使用std::remove_copy_if
或Boost?
bad_ids
有多少元素?如果超过几个,那么使用集合可能会更好。 - rustyxbad_ids
中会有一些元素是非唯一的。 - georgeliatsos