Создал map
std::map<std::string, std::vector<boost::variant<std::string, int, double>>> outputData;
и вектор
std::vector<double> ValDbl;
и когда пытаюсь записать
outputData.insert("123", ValDbl);
получаю ошибку С2664
C2664 "std::_Tree_iterator>> std::_Tree,std::allocator>>,_Pr,_Alloc,false>>::insert(std::_Tree_const_iterator>>,const std::pair,std::allocator>>> &)": невозможно преобразовать аргумент 1 из "const char [4]" в "const std::_Tree_const_iterator>>"
подскажите что я делаю неправильно? ведь variant<...> автоматически должен выбирать тип.
Мне кажется, вы неправильно понимаете концепцию boost::variant.
В вашем случае std::vector<boost::variant<std::string, int, double>> будет содержать не значения определенного типа, а значения типов, указанных в variant
Т.е. выглядеть это будет так:
#include <map>
#include <string>
#include <vector>
#include <iostream>
#include <boost/variant.hpp>
int main ()
{
typedef boost::variant <std::string, int, double> TVariant;
typedef std::vector<TVariant> TVariantVector;
typedef std::map<std::string, TVariantVector> TMySuperMap;
std::string key = "123";
TVariantVector ValDbl;
TMySuperMap outputData;
outputData.insert(TMySuperMap::value_type(key, ValDbl));
TVariantVector& vec = outputData[key];
vec.push_back(0.1);
vec.push_back(1);
vec.push_back("my_string");
for (auto& item: vec)
std::cout << item << std::endl;
return 0;
}
https://www.onlinegdb.com/BJsquLZ0Q
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости