目前,我正在编写一个程序,在该程序中,我使用RSSI估计WiFi设备坐标。该程序包含一个瓶颈。
我已经尝试用其他函数替换字符串比较。没有
完整功能:
std::list<std::list<wSignal*>> SignalGrouper::groupByMac (std::list<wSignal*> signals)
{
std::list<std::list<wSignal*>> groupedSignals;
std::list<wSignal*> doneSignals;
for (std::list<wSignal*>::iterator it1=signals.begin(); it1 != signals.end(); ++it1) //take first signal
{
if(DoesSignalExist(doneSignals, *it1) == false) //check if signal is already been grouped
{
std::list<wSignal*> group;
for (std::list<wSignal*>::iterator it2=signals.begin(); it2 != signals.end(); ++it2)
{
if(DoesSignalExist(doneSignals, *it2) == false)
{
if(boost::iequals((*it2)->MAC, (*it1)->MAC))
{
group.push_back(*it2);
doneSignals.push_back(*it2);
}
}
}
groupedSignals.push_back(group);
}
}
return groupedSignals;
}发布于 2017-07-19 22:50:26
它必须是要返回的std::list吗?否则,您可以通过使用std::map来减少迭代步骤,如下所示:
std::map<MAC, std::list<wSignal*>> SignalGrouper::groupByMac (std::list<wSignal*> signals)
{
std::map<MAC, std::list<wSignal*>> groupedSignals;
for (std::list<wSignal*>::iterator it1 = signals.begin(); it1 != signals.end(); ++it1) //take first signal
{
std::map<MAC, std::list<wSignal*>>::iterator it2 = groupedSignals.find((*it1)->MAC);
if(it2 != groupedSignals.end()) {
it->second.push_back(*it1);
} else {
groupedSignals[(*it1)->MAC] = (*it1);
}
}
return groupedSignals;
}没有经过测试,但应该可以像这样工作。
发布于 2017-07-19 20:44:03
我也怀疑字符串比较是否是真正的问题。但是,如果您坚持以更快的方式比较MAC字符串,您可以尝试反向比较,因为前缀(OUI)是由IEEE提供给供应商的,因此对于相同的供应商来说总是相同的。
发布于 2017-07-19 20:20:26
尝试
#include <boost/algorithm/string.hpp>
boost::equals((*it2)->MAC, (*it2)->MAC);或者用于不区分大小写的比较
boost::iequals((*it2)->MAC, (*it2)->MAC);https://stackoverflow.com/questions/45190247
复制相似问题