C++向量< vector > int >只选择出现一次的条目

C++向量< vector > int >只选择出现一次的条目,c++,vector,C++,Vector,我有一个向量,它有以下条目: 2 3 3 4 2 3 4 5 5.6 我需要创建另一个向量,其中的条目只出现一次。 因此: 34 4 5 5 6如果使用std::pair分配数据,则可以使用std::sort和std::unique: 我已经包括了两个代码示例。 如果尚未添加整数对,则函数add_pair会添加该整数对。 函数make_pairs_with_two_vectors为您提供未排序和排序的向量。 函数make_pairs_with_one_vector只提供排序向量 void add

我有一个向量,它有以下条目:

2 3 3 4 2 3 4 5 5.6

我需要创建另一个向量,其中的条目只出现一次。 因此:

34 4 5
5 6

如果使用std::pair分配数据,则可以使用std::sort和std::unique:


我已经包括了两个代码示例。 如果尚未添加整数对,则函数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


你试过什么吗?总是整数对吗?如果是这样,我建议使用STD::你是指条目、元素或行?创建一个表示一对的类型,其比较操作符按照你的规则工作或使用STD::GON,然后从向量中建立一个STD::SET从Vector中删除重复。C++标准库有很多,包括一个调用。也但这将不起作用,因为其中一个重复项将保留。您可能应该在调用std::unique:vPairs.erasestd::uniquevPairs.begin、vPairs.end、vPairs.end后擦除向量的结尾。如果我在一个条目中有3个元素,我可以使用什么来代替成对的元素?如果有,我需要检查前2个元素1,2在一个条目中删除包含和最终包含的两个条目
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));
}
#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;
    }
}