По-видимому, можно иметь заказанные карты и наборы boost::variant
, как это:древовидные контейнеры boost :: variant - есть ли недостатки?
typedef boost::variant<std::string, int, bool> key_type;
std::map<key_type, size_t> m;
m.insert(std::make_pair(std::string("a"), 3));
m.insert(std::make_pair(1, 7));
auto x = m.find(1);
std::cout << x->first << " " << x->second << "\n";
x = m.find(std::string("a"));
std::cout << x->first << " " << x->second << "\n";
выход:
1 7
a 3
Однако, я считаю, что несколько подозрительно; Я заглянул в исходный код, чтобы понять, как это может работать, но не получило много от этого ... как-то разные типы нужно сравнивать с operator<
... которые нужно будет определить для любых 2 типов; кроме того, что сравнение разных типов с <
не имеет для меня никакого смысла. Поэтому мне интересно, есть ли уловка для использования карт или наборов boost::variant
с точки зрения производительности. Есть ли улов? Или это нормально иметь карты или наборы boost::variant
?