目前我正在製作一個程序,使用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'。 –