您好
我正在用C ++编写一个程序,其中我使用了一个std :: map来插入两个值(char,int),其中每个char(a,b,c,d)都与它相关联。字母表系统(1,2,3,4),这样,如果我对字母表进行排序,它们的数字也会被排序。我知道一个更好的方法是通过Substract the ACSII值和所有,但这是一个更大的代码的一部分,我对地图感兴趣。
在地图中的值
MyMap.insert(pair <char, int> ('a', 1));
但在这种情况下,用户首先输入所有字符,然后输入所有数字,这样我才能使用配对功能。我也不想将值存储在数组中,然后在接收到int值后,将它们插入到地图中。我想知道是否有一个直接的方法来首先插入字符的值然后插入它们的相应值(如果可能,比插入{char值,0}然后将0编辑为数字更好的方法。)。
非常感谢任何帮助!!
答案 0 :(得分:0)
首先你可以为你的地图使用一些错误指示,即。 -1表示没有给出该字符的编号。然后,您可以在不知道实际映射值的情况下添加值,并在以后更改它们。但是,地图不会按照您插入的顺序存储值,请参阅binary tree。因此,您必须特意存储传入字符的顺序。但是如果你无论如何都要存储这些角色并且需要为每个角色制作一个映射,那么创建没有关于它们的值的足够信息的地图条目是没有意义的。我建议首先存储所有字符并在读取此字符的用户定义值时插入所有值。这是一个小例子。您可以在c++ shell上试用。
#include <iostream>
#include <map>
#include <vector>
using namespace std;
int main() {
const size_t numberOfCharacters = 3;
cout << "Please provide the characters you want to map" << endl;
vector<char> characterSequence{numberOfCharacters, -1};
for(size_t i = 0; i < numberOfCharacters; ++i) {
cout << i << ": ";
cin >> characterSequence[i];
}
map<char, int> userDefinedCharacterMapping;
cout << endl << "Please provide the characters mapped values" << endl;
for(size_t i = 0; i < numberOfCharacters; ++i) {
const auto iCharacter = characterSequence[i];
cout << iCharacter << ": ";
cin >> userDefinedCharacterMapping[iCharacter];
}
cout << endl << "Your result:" << endl;
for(const auto& iUserDefinedCharacterMapping : userDefinedCharacterMapping) {
cout << iUserDefinedCharacterMapping.first << " -> " << iUserDefinedCharacterMapping.second << endl;
}
return 0;
}
这是一个示例输出,其中map以不同的顺序迭代字符然后输入。
Please provide the characters you want to map
0: b
1: q
2: a
Please provide the characters mapped values
b: 0
q: -10
a: 13
Your result:
a -> 13
b -> 0
q -> -10