目前我正在制作一个程序,使用RSSI估计WiFi设备坐标。该计划包含一个瓶颈。瓶颈C++排序functionWi-Fi信号
我试过用其他函数替换字符串比较。那没
的全部功能:
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;
}
您是如何确定这是瓶颈的?是堆栈轨迹的统计抽样吗?因为如果你有数十亿字符串,代码自然会在'(* it2) - > MAC ==(* it1) - > MAC'上花费很多时间。你不能比专用功能更有效率。 – StoryTeller
'std :: string'比较函数首先检查字符串长度,在这里它们将相等,因为您有2个MAC地址。如果它们相同,则每个字符都将进行比较,直到找到第一个差异或“\ 0”。所以没有更快的方法......正如StoryTeller已经说过的那样:这真的是瓶颈吗? –
尝试将'signals'更改为以'MAC'为关键字的'std :: map'。 –