【发布时间】:2018-02-24 11:04:48
【问题描述】:
为了从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 可以在这里使用吗?如何使用?
【问题讨论】:
-
如果您有工作代码可以改进,请联系SE Code Review。
-
谢谢!我可以轻松地将其转移到 SE Code Review 还是应该复制/粘贴它?
-
是的,只需复制整个问号即可。把它作为问题放在那里,然后删除这个。
-
bad_ids中有多少元素在您的应用程序中实际存在?如果超过几个,那么您可能会从使用集合中受益。 -
@RustyX:我希望
bad_ids中的一些元素是非唯一的。
标签: c++ algorithm c++11 boost stl