查找 std::vector 中也存在于 std::map 中的元素
Find element in std::vector which is also present in in a std::map
我想得到 std::vector
中每个元素 的 迭代器,它也存在于 std::map
中(如 .first
或者作为 key).
我怎样才能最有效地解决这个问题?
我会做如下事情,这将有一个 O( N log(n) ),其中 N = 向量的大小,n = 地图的大小。
这不需要双循环。
std::vector<int> vec{1,2,3,4,5,6,7,8};
std::map<int, int> myMp{{1,2}, {2,2}, {5,2}, {6,2} };
std::vector<std::vector<int>::iterator> v_itr; // iterators
for(auto itr = vec.begin(); itr != vec.end(); ++itr)
{
auto mp_find = myMp.find(*itr); // log(n) where n = myMp.size()
if(mp_find != myMp.cend()) v_itr.emplace_back(itr);
}
我想得到 std::vector
中每个元素 的 迭代器,它也存在于 std::map
中(如 .first
或者作为 key).
我怎样才能最有效地解决这个问题?
我会做如下事情,这将有一个 O( N log(n) ),其中 N = 向量的大小,n = 地图的大小。 这不需要双循环。
std::vector<int> vec{1,2,3,4,5,6,7,8};
std::map<int, int> myMp{{1,2}, {2,2}, {5,2}, {6,2} };
std::vector<std::vector<int>::iterator> v_itr; // iterators
for(auto itr = vec.begin(); itr != vec.end(); ++itr)
{
auto mp_find = myMp.find(*itr); // log(n) where n = myMp.size()
if(mp_find != myMp.cend()) v_itr.emplace_back(itr);
}