C++ vector<vector<int>>'仅选择只出现一次的条目
C++ vector<vector<int>>`select only entries that appear just once
我有vector<vector<int>>
,它有以下条目:
2 3
3 4
2 3
4 5
5 6
我需要用只出现一次的条目创建另一个vector<vector<int>>
。因此:
3 4
4 5
5 6
我包含了两个代码示例。函数"add_pair"在尚未添加整数对的情况下添加该对。函数"make_pairs_with_two_vectors"为您提供未排序和排序的向量。函数"make_pairs_with_one_vector"只提供排序后的向量。
void add_pair(std::vector<std::pair<int, int>>& _MyPairs, std::pair<int, int> _Pair) {
for (unsigned int i = 0; i < _MyPairs.size(); i++) {
if (_MyPairs[i].first == _Pair.first && _MyPairs[i].second == _Pair.second) {
return;
}
}
_MyPairs.push_back(_Pair);
}
void make_pairs_with_two_vectors() {
std::vector<std::pair<int, int>> my_pairs;
my_pairs.push_back(std::pair<int, int>(2, 3));
my_pairs.push_back(std::pair<int, int>(3, 4));
my_pairs.push_back(std::pair<int, int>(2, 3));
my_pairs.push_back(std::pair<int, int>(4, 5));
my_pairs.push_back(std::pair<int, int>(5, 6));
std::vector<std::pair<int, int>> my_pairs_once;
for (unsigned int i = 0; i < my_pairs.size(); i++) {
add_pair(my_pairs_once, my_pairs[i]);
}
}
void make_pairs_with_one_vector() {
std::vector<std::pair<int, int>> my_pairs;
add_pair(my_pairs, std::pair<int, int>(2, 3));
add_pair(my_pairs, std::pair<int, int>(3, 4));
add_pair(my_pairs, std::pair<int, int>(2, 3));
add_pair(my_pairs, std::pair<int, int>(4, 5));
add_pair(my_pairs, std::pair<int, int>(5, 6));
}
这将给出您要查找的结果使用std::map
和std::pair
#include <iostream>
#include <vector>
#include <map>
int main() {
std::map<std::pair<int, int>, int> count_map;
std::vector<std::pair<int, int> > v;
std::vector<std::pair<int, int> > v2;
int a[10] = {2,3,3,4,2,3,4,5,5,6};
for(int i = 0; i < 10; i++) {
int first = a[i];
int second = a[++i];
std::pair<int, int> p = std::make_pair(first, second);
v.push_back(p);
count_map[p]++;
}
for(auto it = count_map.begin(); it != count_map.end(); ++it) {
if(it->second != 1) continue;
v2.push_back(it->first);
std::cout << it->first.first << ", " << it->first.second << std::endl;
}
}
如果使用std::pair
分配数据,则可以使用std::sort
和std::unique
:
std::vector<std::pair<int,int>> vPairs;
std::sort(vPairs.begin(), vPairs.end());
std::vector<std::pair<int,int>>::iterator it;
it = std::unique(vPairs.begin(), vPairs.end()); // iterator keeps the last unique element position
vPairs.resize( std::distance(vPairs.begin(),it) ); // resize according to unique pair number
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- EASTL矢量<向量<int>>连续的
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 什么是模板&lt;&gt;inline bla bla
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- eigen :: llt&lt;eigen :: matrixxd&gt;具有不完整的类型
- 错误,包括&lt; ctype&gt;在原子上使用C 11
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 是std :: set&lt; std :: future&gt;不可能存在
- 是numeric_limits&lt; int&gt; :: is_modulo从逻辑上矛盾
- opencv 2.4.7在iOS错误背景_segm.hpp #include&lt; list&gt;未找到
- 在修改列表后,std :: list&lt; t&gt; :: end()的值是否会更改
- ///<评论></评论>在Visual Studio中