gpt4 book ai didi

c++ - 基于一个成员删除结构的有效方法,但选择由另一个成员保留哪个

转载 作者:行者123 更新时间:2023-11-30 01:33:55 25 4
gpt4 key购买 nike

我有一个找到的 WiFi 网络的 vecor 列表。问题是,它会检测所有发射器,即使它们具有相同的名称(中继器)。我想删除重复项,但保留质量最高 (RSSI) 的那个。

Example:
{HomeWiFi, -60}
{HomeWiFi, -55}
{HomeWifi, -80} //Worse signal, duplicate name = repeater further away
{AnotherWifi, -70}

Expected output:
{HomeWiFi, -55}
{AnotherWifi, -70}

我正在考虑按名称对它们进行排序,然后使用 std::unique 删除连续的重复项,但我不知道如何按质量指定“二级”排序。

struct WiFiParam
{
String SSID;
int32_t RSSI;
.....
};

std::vector<WiFiParam> list;

最佳答案

使用自定义仿函数,您可以:

std::vector<WiFiParam> params /*= */;

auto less_by_name_signal = [](const WiFiParam& lhs, const WiFiParam& rhs){
return std::tie(lhs.SSID, rhs.RSSI) < std::tie(rhs.SSID, lhs.RSSI);
};
std::sort(params.begin(), params.end(), less_by_name_signal);
auto equal_by_name = [](const WiFiParam& lhs, const WiFiParam& rhs){
return lhs.SSID == rhs.SSID;
};
params.erase(std::unique(params.begin(), params.end(), equal_by_name), params.end());

Demo

关于c++ - 基于一个成员删除结构的有效方法,但选择由另一个成员保留哪个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57288858/

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