输入地图值的标准输入

时间:2014-02-16 18:22:34

标签: c++ input map

我正在尝试编写一个以整数作为键的映射,然后是通过标准输入提供给它的x个int值。这是我第一次使用地图,所以我遇到了几个问题,并且想知道是否有人可以帮助更好地理解我做错了什么。通常使用矢量/数组,以下工作正常:

int standardInput;
for (int i = 1; i<=n; i++){
    cin standardInput;
    array[i] = standardInput;
}

使用地图时我无法使其工作:

int numberToCompare = 4;
map<int numberToCompare, int>myMap;
    int standardInput;
    cout << "Enter numbers: " << endl;
    for (int i = 1; i <= n; i++){
        cin standardInput;
        myMap.insert(standardInput);
    }

我仍在努力了解关键和价值观。我在阅读地图时理解的方式是,使用地图时,关键是独特的,与多地图不同。我不知道该怎么做是允许用户输入来填充地图的其余部分。我在网上看到很多例子,在代码中人们手动输入所有输入,执行以下操作(这违背了我想要完成的任务)。

portMap_.insert(pair<string,int>("fourth", 4444)); 
portMap_.insert(pair<string,int>("fifth", 5555)); 

编辑:为了澄清如果我引起一些混乱,我试图用一个通过标准输入给出的数字填充地图。

5 个答案:

答案 0 :(得分:1)

我建议您浏览std::map找到here的文档。然后,请查看insert()方法文档here中提供的示例。

声明一个map对象,您需要通过提供类型名称作为模板参数来指定键的类型和值的类型:

#include <map>
using namespace std;

map<int,int> myMap;

如果您想插入一个键/值对:

int myKey = 10;
int myVal = 100;
myMap.insert(pair<int,int>(myKey, myVal));

使用某些typedef可以使上述内容更简洁:

typedef map<int,int> IntMap;
typedef pair<int,int> IntPair;

IntMap myMap;
myMap.insert(IntPair(10, 100));

如果您希望用户输入提供键/值对,只需编写一个接受标准输入值的简单循环,然后将值插入到地图中。

这里有大量资源可以从标准输入中读取值。像下面这样的东西可以解决问题:

// pseudo-code
while (did the user quit?)
{
    int key   = 0;
    int value = 0;

    cin >> key >> value;

    // maybe if the user enters -1, then you quit, otherwise:

    myMap.insert(pair<int,int>(key, value));
}

答案 1 :(得分:1)

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n;
    scanf("%d", &n);
    map<int, string> m;
    for(int i = 1; i <= n; i++) {
        string s = "abracadabra";
        m.insert(pair<int, string>(i, s));
    }
    for(auto it = m.begin(); it != m.end(); it++) {
        cout << it->first << " " << it->second <<"\n";
    }
}

这很好用。

答案 2 :(得分:0)

问题:编写一个以整数作为键的映射,然后写入通过标准输入提供给它的x个int值

解决方案这里我提供了代码,它将获取std输入并将其存储到MAP, 在此处输入代码

`#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <map>
#include <string>


using namespace std;

int main()
{
    int n;
    int key;
    long x;
    cin >> n;//std input for number of entries in to MAP
    map <int, long> map_book;
    for (int i = 0; i < n; i++) {
        cin >> x;//std input for VALUE
        cin >> key;//std input for KEY
        map_book[key] = x;
    }

    //here am searching the x and pinting if it is there in MAP or Else priniting it is not found
    while(cin >> x) {
        if (map_book.find(x) != map_book.end()) {
            cout << x << "=" << map_book.find(x)->second << endl;
        } else {
            cout << "Not found" << endl;
        }
    }
    return 0;
}`

答案 3 :(得分:0)

这可能会有所帮助。

#include<iostream>
#include<map>
using namespace std;
int main()
{
    map<char,int>mp;
    char a;
    int b,n;
    cin>>n;
    for(int i = 0; i<n; i++){
        cin>>a>>b;
        mp.insert(pair<char,int>(a,b));
    }
    cout<<endl;
    for(auto&x:mp)
    {
        cout<<x.first<<" "<<x.second<<endl;
    }
    return 0;
}

输出:

3
a 1
b 2
c 3

a 1
b 2
c 3

答案 4 :(得分:-1)

#include <iostream>
#include <map>

int main ()
{
  std::map<char,int> first;

  first['x']=8;
  first['y']=16;
  first['z']=32;

  for(map<char,int>::iterator it = first.begin(); it != first.end(); ++it) {
        cout << it->first <<" "<< it->second<<endl;
    }

  return 0;
}