由字符串而不是整数值索引的矩阵 < C++有可能有一个int值矩阵,我可以通过字符串索引访问这些值吗?做像M[“一”][“二”]++这样的事情;等等。

由字符串而不是整数值索引的矩阵 < C++有可能有一个int值矩阵,我可以通过字符串索引访问这些值吗?做像M[“一”][“二”]++这样的事情;等等。,c++,string,map,stl,matrix,C++,String,Map,Stl,Matrix,使用无序映射(在boost或c++11中)或只在旧的c++中使用map。制作一张无序的地图。应该这样做。使用unordered\u map(在boost或c++11中)或只在旧的c++中使用map。制作一张无序的地图。应该这样做。这不是直接的,但是既然你问了,你可能不知道操作符[]()。 您可以定义自定义的[]运算符 为了向您解释背后的概念:您可以定义一个类行或列,它拥有一个std::vector。对于此类,您可以定义运算符[]: class Row { public: int&

使用
无序映射
(在boost或
c++11
中)或只在旧的
c++
中使用
map
。制作一张无序的地图。应该这样做。

使用
unordered\u map
(在boost或
c++11
中)或只在旧的
c++
中使用
map
。制作一张无序的地图。应该这样做。

这不是直接的,但是既然你问了,你可能不知道
操作符[]()
。 您可以定义自定义的
[]
运算符

为了向您解释背后的概念:您可以定义一个类行或列,它拥有一个
std::vector
。对于此类,您可以定义
运算符[]

class Row
{
public:
    int& operator[](const std::string& );
    //...
    std::vector<int> ints;
}
类行
{
公众:
int&运算符[](const std::string&);
//...
std::向量整数;
}
然后,类矩阵将拥有一个
std::vector

类矩阵
{
公众:
行和运算符[](const std::string&);
//...
std::向量行;
}

这将使您能够使用语法
矩阵m;m[“一”][“二”]=2

这不是直接的,但是既然你问了,你可能不知道
操作符[]()
。 您可以定义自定义的
[]
运算符

为了向您解释背后的概念:您可以定义一个类行或列,它拥有一个
std::vector
。对于此类,您可以定义
运算符[]

class Row
{
public:
    int& operator[](const std::string& );
    //...
    std::vector<int> ints;
}
类行
{
公众:
int&运算符[](const std::string&);
//...
std::向量整数;
}
然后,类矩阵将拥有一个
std::vector

类矩阵
{
公众:
行和运算符[](const std::string&);
//...
std::向量行;
}

这将使您能够使用语法
矩阵m;m[“一”][“二”]=2

我会将内部细节与用户界面分开

例如,如果你想使用另一种语言怎么办

具有从单词到整数的映射:

map<string, unsigned int> index;
index["one"] = 1;
// .etc

我会将内部细节与用户界面分开

例如,如果你想使用另一种语言怎么办

具有从单词到整数的映射:

map<string, unsigned int> index;
index["one"] = 1;
// .etc

你可以使用map@Mordachai如何迭代映射M?您可能会使用嵌套循环,就像对矩阵一样:
for(auto-outter=matrix.begin();outter!=matrix.end();++outter)for(auto-inner=outter.begin();inner!=outter.end();++inner){/*使用*inner*/}可以使用map@Mordachai如何迭代映射M?您可能会使用嵌套循环,就像对矩阵一样:
for(auto-outter=matrix.begin();outter!=matrix.end();++outter)for(auto-inner=outter.begin();inner!=outter.end();++inner){/*使用*inner*/}
是否可以只使用map M;在不迭代映射的情况下,将M的所有值初始化为0?如何迭代映射M的值@shn使用迭代器:
for(map::iterator it=M.begin();it!=M.end();++it)
最好使用
std::map
,但是语法就不会那么漂亮了。@Zyx2000为什么你认为它会更好?可以只使用map M;在不迭代映射的情况下,将M的所有值初始化为0?如何迭代映射M的值@shn使用迭代器:
for(map::iterator it=M.begin();it!=M.end();++it)
最好使用
std::map
,但这样语法就不会那么漂亮了。@Zyx2000为什么你认为它会更好?