unordered_map <(int 或 string),MyClass> 如何访问和打印 MyClass 的元素

unordered_map <(int or string), MyClass> How to access and print elements of MyClass

本文关键字:MyClass 访问 何访问 打印 元素 int map string unordered lt gt      更新时间:2023-10-16

这是我的代码。

#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;
}

出输出:

3: 11 
2: 12
1: 11

正如我在评论中解释的那样,我如何在我的课程中使用unordered_map&lt;>函数,并通过您的元素进行循环,以便我可以使用类的方法?

我需要此输出:

string1 1 true
string2 2 true
string1 1 true

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

编辑好吧,不是准确的地图类型参数,而是在cppreference.com上指定的地图的运算符[]参数。

此外,要在循环中打印出它,您需要为您的班级定义输出操作员(操作员&lt;&lt;)。

您的工作代码:

#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;
}