【问题标题】:Inserting values into map individually将值单独插入地图
【发布时间】:2018-09-17 05:08:22
【问题描述】:

您好,
我正在用 C++ 编写一个程序,其中我使用 std::map 插入两个值(char,int),其中每个 char(a,b,c,d)都与它在字母系统中的出现有关(1 ,2,3,4),这样,如果我对字母进行排序,它们的数字也会被排序。我知道更好的方法是减去 ACSII 值和所有值,但这是更大代码的一部分,我对地图感兴趣。


现在,在我的程序中,用户以未排序的方式输入字符 {a, b, c},然后(在输入字符后)他们为每个 aphabet 分别输入他们之前输入的数字(类似于自定义字母系统)。
我知道如何在地图中使用
MyMap.insert(pair <char, int> ('a', 1));

但在这种情况下,用户先输入所有字符,然后输入所有数字,所以我不能使用 pair 功能。我也不想将值存储在数组中,然后在接收到 int 值后,将它们插入到地图中。我想知道是否有一种直接的方法可以先插入字符的值,然后再插入它们的相应值(如果可能,比插入 {char value, 0} 然后将 0 编辑为数字更好的方法。)。

非常感谢任何帮助!

【问题讨论】:

  • 只插入 0 作为整数值?
  • 不是,我的意思是因为他们先输入字符值,把它们存储在map中,int为0,然后修改为之后输入的数字
  • 不,没有这样的方法。您需要插入完整的对。
  • 不能先插入char的值,再从头加到int中
  • std::map(或std::unordered_map)中的每个元素都是一个pair。包含键 和 值的对。就是这样,这就是你必须忍受的“限制”。如果您不希望这样,那么 std::map 不适合您。

标签: c++ stl hashmap


【解决方案1】:

首先,您可以为您的地图使用一些错误指示,即。 -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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-23
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    • 1970-01-01
    • 2016-06-16
    • 2010-10-26
    相关资源
    最近更新 更多