How do I provide stable iteration order with std::unordered_map for embedded targets?

When working with embedded targets, providing a stable iteration order with std::unordered_map can be challenging due to its nature of being an unordered container. However, you can achieve this by using a combination of other data structures to maintain the order in which elements are inserted. Below is an example of how to implement this using a vector alongside the unordered map.

#include <iostream> #include <unordered_map> #include <vector> class StableOrderedMap { public: void insert(int key, int value) { if (map.find(key) == map.end()) { order.push_back(key); // Maintain insertion order } map[key] = value; } void display() { for (int key : order) { std::cout << key << ": " << map[key] << std::endl; } } private: std::unordered_map<int, int> map; std::vector<int> order; }; int main() { StableOrderedMap som; som.insert(2, 40); som.insert(1, 20); som.insert(3, 30); som.display(); // Output will respect insertion order return 0; }

stable iteration order std::unordered_map embedded targets C++ standard library unordered container data structures