std::map::find vs std::map::at

 avatar
unknown
c_cpp
a year ago
1.6 kB
6
Indexable
#include <vector>
#include <iostream>
#include <chrono>
#include <map>

void find(const std::map<int, int>& map) {
    const auto& it = map.find(0);
}

void at(const std::map<int, int>& map) {

  try {

    map.at(0);

  } catch (std::out_of_range) {}
}

void runTestCase(const std::map<int, int>& map) {

  const uint32_t retries = 1000000;

  // Test case 1: std::map::find
  {
    auto start = std::chrono::high_resolution_clock::now();
    for (int i = 0; i < retries; i++) {
      find(map);
    }
    auto seconds = std::chrono::duration<double>(std::chrono::high_resolution_clock::now() - start).count();

    std::cout << "std::map::find with [" << retries << "] attempts: " << seconds << " seconds" << std::endl;
  }

  // Test case 2: std::map::at
  {
    auto start = std::chrono::high_resolution_clock::now();
    for (int i = 0; i < retries; i++) {
      at(map);
    }
    auto seconds = std::chrono::duration<double>(std::chrono::high_resolution_clock::now() - start).count();

    std::cout << "std::map::at   with [" << retries << "] attempts: " << seconds << " seconds" << std::endl;
  }
}

int main(int argc, char* argv[]) {

    std::map<int, int> map;

    // Run test for empty map
    std::cout << "Test case for empty map" << std::endl;
    runTestCase(map);
    std::cout << std::endl;

    map[0] = 1;
    map[1] = 12;
    map[7] = 42;

    // Run test for map with data
    std::cout << "Test case for map with data" << std::endl;
    runTestCase(map);
    std::cout << std::endl;

    std::cout << "Test is finished" << std::endl;
    return 0;
}
Editor is loading...
Leave a Comment