【发布时间】:2017-07-19 12:13:44
【问题描述】:
目前我正在制作一个程序,在该程序中我使用 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;
}
【问题讨论】:
-
您如何确定它是瓶颈?是堆栈跟踪的统计抽样吗?因为如果你有数十亿的字符串,自然代码会花很多时间在
(*it2)->MAC == (*it1)->MAC。没有比专用功能更高效的了。 -
您通过副本传递您的列表?!
-
您可以通过 MAC
sort您的信号,将算法复杂度从 O(N²) 降低到O(N logN)。 -
链表是最被高估的数据结构。
-
由于MAC地址正好是6个字节,你可以使用
uint64_t来存储和比较项目。
标签: c++ sorting linked-list lag