gpt4 book ai didi

C++ - 从结构的排序 vector 中删除重复项

转载 作者:行者123 更新时间:2023-11-30 03:47:34 29 4
gpt4 key购买 nike

我的结构如下所示。

struct Num {
uint64_t key;
uint64_t val;
};

// Compare based on their key and value.
bool num_less(Num a, Num b)
{
if(a.key < b.key)
return true;
else if(a.key == b.key)
{
if(a.val < b.val)
return true;
else
return false;
}
else
return false;
}

// Compare based on their key and value.
bool num_equal(Num a, Num b)
{
return ((a.key == b.key) && (a.val == b.val)) ? true : false;
}

我有一个结构 vector 。我想从该 vector 中删除重复项。我尝试了以下方法。

  1. 对 vector 进行排序
  2. 去除重复项(连续放置)

    vector<Num> arr;

    sort(arr.begin(), arr.end(), num_less);

    arr.erase(std::unique(arr.begin(), arr.end(), num_less);, arr.end());

但是当我运行上面的代码时,只有排序 vector 的第一个元素被打印出来,其余的元素以某种方式被删除。我不确定我做错了什么。

编辑 - 我尝试在 std::unique 中使用 num_equal 函数.它奏效了。

最佳答案

你需要定义相等谓词

struct Num 
{
unsigned int key;
unsigned int val;
};

bool num_less(const Num &a, const Num &b)
{
return (a.key<b.key)||(!(b.key < a.key))&&(a.val<b.val));
}
bool num_equal(const Num &a, const Num &b)
{
return (a.key==b.key)&&(a.val==b.val);
}
int main()
{
vector<Num> arr;
Num temp;
// add some examples
temp.key=10; temp.val=20;
arr.push_back(temp); arr.push_back(temp);
temp.key=11; temp.val=23;
arr.push_back(temp); arr.push_back(temp);
temp.key=10; temp.val=20;
arr.push_back(temp); arr.push_back(temp); arr.push_back(temp);
//sort
sort(arr.begin(),arr.end(),num_less);
//delete dublicates
arr.erase(unique(arr.begin(),arr.end(),num_equal),arr.end());
return 0;
}

关于C++ - 从结构的排序 vector 中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33651946/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com