我有一个发现的WiFi网络的vecor list
。问题是,即使它们具有相同的名称(中继器),它也会检测到所有发射机。我想删除重复项,但保留最高质量(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