2014-03-13 2 views
0

если у меня есть набор адресов (повторяемый), для которых есть хит или промах в l1 или l2. Как найти количество обращений/пропусков для этого адреса в L1 и L2., используя Карты в C++

map<int, pair<int, int> myMap; 
while(!EOF){ 
    bool hit = test_bar(address); # L1 
    if(!hit) 
    bool hit1= test_bar(address); #L2 

    myMap.insert(address,make_pair(hit, hit1)); 
} 

Будет ли это правильно?

ответ

0

Если я это хорошо понимаю, предлагаемое решение не будет работать, потому что нет возможности подсчитать количество обращений и промахов. Возможно, вам стоит рассмотреть что-то среди этих строк: структура counters отслеживает количество промахов и хитов l1/l2. Карта c отображает каждый адрес на свой счетчик.

struct counters { 
    int l1_hits, l1_misses, l2_hits, l2_misses; 
}; 

map<int, counters> c; 
while (!EOF) { 
    auto it = c.find(adress); 
    if (it == c.end()) it = c.insert(address, {0,0,0,0}); 
    bool hit1 = test_bar(address); # L1 
    if (hit1) ++it->second.l1_hits; 
    else { 
     ++it->second.l1_misses; 
     bool hit2 = test_bar(address); # L2 
     if (hit2) ++it->second.l2_hits; 
     else ++it->second.l2_misses; 
    } 
} 
// print 
for (auto it : c) { 
    cout << it.first 
     << " " << it.second.l1_hits 
     << " " << it.second.l1_misses 
     << " " << it.second.l2_hits 
     << " " << it.second.l2_misses << endl; 
} 
+0

Как вы можете суммировать их сейчас? и печатать? – pistal

+0

То, что вы поняли, правильно! – pistal

+0

Что вы хотите? Список количества обращений и промахов по каждому адресу? – anumi

Смежные вопросы