C++ 无序地图<;(整数或字符串),MyClass>;如何访问和打印MyClass的元素

C++ 无序地图<;(整数或字符串),MyClass>;如何访问和打印MyClass的元素,c++,c++11,unordered-map,C++,C++11,Unordered Map,这是我的密码 #include <iostream> #include <string> #include <unordered_map> using namespace std; class Token { string strVar; int intVar; bool boolVar; public: Token(string strVar, int intVar ,bool boolVar): st

这是我的密码

#include <iostream>
#include <string>
#include <unordered_map>


using namespace std;

class Token {
    string strVar;
    int intVar;
    bool boolVar;

public:
    Token(string strVar, int intVar ,bool boolVar):
        strVar(strVar), intVar(intVar) ,boolVar(boolVar){
    }

    string getStrVar()  {return this->strVar;}
    int getIntVar()     {return this->intVar;}
    bool getBoolVar()   {return this->boolVar;}

};

int main(){
    unordered_map<int , int> mymap;
        //I WANT -> unordered_map<int , Token> mymap;

    mymap[1]= 11;
        //I WANT -> // mymap[1] = Token("string1", 1, true);
    mymap[2]= 12;
        //I WANT -> // mymap[2] = Token("string2", 2, false);
    mymap[3]= 13;
        //I WANT -> //mymap[3] = Token("string3", 3, true);

    int tk = mymap[1];
        //I WANT -> //Token tk = mymap[1];
    mymap[3] = tk;

    for (auto& x: mymap) {
        cout << x.first << ": " << x.second << endl;
        //I WANT -> print all Var from MyClass,
        //for example, x.second.getStrVar() << x.second.getIntVar() << x.second.getBoolVar() << endl;
    }

    return 0;
}
正如我在评论中所解释的,我如何在我的类中使用无序的_映射函数,并在元素中循环,以便使用类的方法

我需要这个输出:

string1 1 true
string2 2 true
string1 1 true

映射类型参数必须是默认可构造的。这意味着,您需要为类标记声明默认构造函数

编辑 不完全是map类型参数,而是指定的map的运算符[]参数

此外,要在循环中打印出来,您需要定义一个输出操作符(operatorintVar;} bool getBoolVar(){返回此->boolVar;} friend std::ostream和操作员// mymap[1]=令牌(“string1”,1,true); //mymap[2]=12; //我想要->// mymap[2]=令牌(“string2”,2,false); //mymap[3]=13; //我想要->// mymap[3]=令牌(“string3”,3,true); //int tk=mymap[1]; //我想要->// 令牌tk=mymap[1]; mymap[3]=tk; 用于(自动&x:mymap){
你能不能像在注释掉的部分中那样或多或少地做到这一点。当你这样尝试时,你到底遇到了什么问题?@SeanBurton当我运行时,我得到了以下错误:for(auto&x:mymap){XXX您能发布实际产生错误的完整而准确的代码吗…@SeanBurton其默认构造函数代码可以编译,但我找不到为什么需要默认构造函数。
std::无序映射满足容器、分配器容器、无序关联容器的要求。
我明白这个要求。但我已经有了一个构造函数,对吗?比如:Token(stringstrvar,intintvar,boolboolvar):strVar(strVar),intVar(intVar),boolVar(boolVar){}@Caribou“定义操作符”是什么意思?@MateuszDrost我编辑了我的答案,只做了一些澄清,并链接到了cppreference,在那里它得到了精确的解释。@Guttizin好的,我现在明白了,如果使用方法
insert
at
@Guttizin输出操作符,而不是
操作符[]
,则不需要默认构造函数让我们用简单的o
string1 1 true
string2 2 true
string1 1 true
#include <iostream>
#include <string>
#include <unordered_map>

using namespace std;

class Token {
    string strVar{};
    int intVar{};
    bool boolVar{};

public:

    Token() {};

    Token(string strVar, int intVar ,bool boolVar):
        strVar(strVar), intVar(intVar) ,boolVar(boolVar){
    }

    string getStrVar()  {return this->strVar;}
    int getIntVar()     {return this->intVar;}
    bool getBoolVar()   {return this->boolVar;}

    friend std::ostream& operator<< (std::ostream& out, const Token& rhs) {
        out << rhs.strVar;
    }

};

int main(){
        //unordered_map<int , int> mymap;
        //I WANT -> //
    unordered_map<int , Token> mymap;

        //mymap[1]= 11;
        //I WANT -> //
    mymap[1] = Token("string1", 1, true);
        //mymap[2]= 12;
        //I WANT -> //
    mymap[2] = Token("string2", 2, false);
        //mymap[3]= 13;
        //I WANT -> //
    mymap[3] = Token("string3", 3, true);

        //int tk = mymap[1];
        //I WANT -> //
    Token tk = mymap[1];
    mymap[3] = tk;

    for (auto& x: mymap) {
        cout << x.first << ": " << x.second << endl;
        //I WANT -> print all Var from MyClass,
        //for example, x.second.getStrVar() << x.second.getIntVar() << x.second.getBoolVar() << endl;
    }

    return 0;
}