Was ist der schnellste Weg, um einen großen STL-Container zu "löschen"? In meiner Anwendung muss ich mit großen std::map
, z. B. 10000 Elemente beschäftigen.C++ STL-Container :: clear :: swap
Ich habe die folgenden 3 Methoden getestet, um eine std::map
zu löschen.
- Erstellen Sie einen neuen Container jedes Mal, wenn ich es brauche.
- Aufruf
map::clear()
Methode. - Aufruf
map::swap()
Methode.
Es scheint, dass ::swap()
das beste Ergebnis gibt. Kann mir bitte jemand erklären, warum das so ist? Ist es sicher zu sagen, dass die Methode map::swap()
die richtige Methode ist, eine std :: map zu "löschen"? Ist es das gleiche für andere STL-Container, zum Beispiel set
, vector
, list
usw.
m_timer_start = boost::posix_time::microsec_clock::local_time();
// test_map.clear();
test_map.swap(test_map2);
for (int i = 0; i< 30000; i++){
test_map.insert(std::pair<int, int>(i, i));
}
// std::map<int, int> test_map_new;
// for (int i = 0; i< 30000; i++){
// test_map_new.insert(std::pair<int, int>(i, i));
// }
m_timer_end = boost::posix_time::microsec_clock::local_time();
std::cout << timer_diff(m_timer_start, m_timer_end).fractional_seconds() << std::endl; // microsecond
"Fastest" ist fast immer implementierungsabhängig. – ildjarn
Wie groß war der Unterschied zwischen den dreien? Wenn es nicht viel ist, würde ich sagen, klar wäre am besten lesbar. – chris
Wie benutzen Sie 'std :: swap' und wie bewerten Sie das? –