从数组中获取唯一编号,完全删除重复项

时间:2016-05-25 10:20:13

标签: c++

int a[5] = {5,2,3,2,4}

如果我有这样的数组,我想得到唯一的

  

5,2,3,4

  

5,3,4

任何重复的号码都将被删除。

我尝试过使用std::<set>

const size_t len = sizeof(a) / sizeof(a[0]);
std::set<int> s(a, a + len);

然而,它不起作用,因为它会产生独特的:

  

5,2,3,4

2 个答案:

答案 0 :(得分:3)

您可以将std::multisetstd::multiset::count一起使用,并仅在具有相同键的元素数量恰好等于.tabs { background-color: #353A41; border: 0; } .tabs a{ color: #FFFFFF; } .tabs :hover{ background-color: #2A2E34; } 时获取元素。 e.g。

1

结果:

int a[5] = {5,2,3,2,4};
const size_t len = sizeof(a) / sizeof(a[0]);  
multiset<int> m(a, a + len);

vector<int> v;

copy_if(begin(a), end(a), back_inserter(v), [&m](auto i) { return m.count(i) == 1; });

copy(v.begin(), v.end(), ostream_iterator<int>(cout, " "));

LIVE

如果你不能使用lambda,你可以改写编写器,或者直接编写循环而不是5 3 4

copy_if

答案 1 :(得分:0)

  • 对数组进行排序。使用std::sort
  • 将重复元素交换为结束。使用std::unique
    • 现在你有2个分区。第一个分区包含唯一身份(但包括具有重复项的onces),第二个分区包含所有重复项。 std::unique将迭代器返回到分区的边界(一个超过最后一个唯一元素)。
  • 结果将为uniques \ duplicates。使用范围std::set_difference[begin,boundary[
  • [boundary, end[