Home > Net >  Having trouble making a map with different types
Having trouble making a map with different types

Time:05-29

I want to make a map that has string keys that have string values and with the second data type being string keys with a list value.

I tried following the solutions mentioned under this thread: Store multiple types as values in C dictionary? but I keep on getting these errors. Any help is appreciated, I've been at this for quite some time.

'variant' is not a member of 'std' even though I have it included on top

template argument 1 is invalid on the string syntax

no operator "=" matches these operands on the equal signs


#include <iostream>
#include <map>
#include <string>
#include <list>
#include <variant>

typedef std::map<std::variant<std::string, std::list<std::string>>, std::variant<std::string, std::string>> Dict;

int main(){
    std::list<std::string> List1 {"Teamwork", "Hate"};
    Dict d;
    d["TIME"] = "8:15";
    d["TAGS"] = List1;

    return 0;
}


CodePudding user response:

std::map<std::variant<std::string, std::list<std::string>>, std::variant<std::string, std::string>>

Is a map with (string or list keys) and (string or string) of values. Having variant with duplicate types is allowed but unnecessary and it will complicate things.

You want std::map<std::string,std::variant<std::string, std::list<std::string>>> i.e. map with string keys and (string or list) values.

This compiles:

#include <iostream>
#include <map>
#include <string>
#include <list>
#include <variant>
// Prefer using in C   to typedef.
using Dict = std::map<std::string,std::variant<std::string, std::list<std::string>>>;

int main(){
    std::list<std::string> List1 {"Teamwork", "Hate"};
    Dict d;
    d["TIME"] = "8:15";
    d["TAGS"] = List1;

    return 0;
}

Variants are c 17, make sure you have it set if you are getting include errors.

CodePudding user response:

Try to change your c version to c 17. If your using visual studio you can go to Project → Properties → C/C → Command Line /std:c latest

Then click Apply and OK.

  •  Tags:  
  • c
  • Related