C ++,Map<>结构,但有差距

时间:2017-11-24 02:33:10

标签: c++ dictionary

我正在尝试使用类来创建字典<键,值>在C ++中。

我在网上发现地图是我被禁止使用的课程。

然而,当我尝试使用Map时,它会填补键之间的空白。

这是一个问题,因为键是数字,但它们非常稀疏。

所以在一组中我可能有钥匙[1,20,30000,70000000]。我希望我的地图只存储这4个值,而不是每个值在1到70000000之间。

#include <iostream>
#include <map>

using namespace std;

int main()
{
    map<int,int> a = {{1,-1},{20,200}}; // I want this to just store {1,20}
    for(int x = 0; x < a.size(); x++) cout << a[p(x)] << ","; //however, when I print it I get [0,1..,19,20]
    return 0;
}

输出

0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,     

是否有一些解决方法可以避免C ++填补空白&#34;或STD中可用于此目的的任何其他类别?

3 个答案:

答案 0 :(得分:6)

// 1. Importing the SDK import AWS from 'aws-sdk'; // 2. Configuring the S3 instance for Digital Ocean Spaces const spacesEndpoint = new AWS.Endpoint( `${REGION}.digitaloceanspaces.com` ); const url = `https://${BUCKET}.${REGION}.digitaloceanspaces.com/${file.path}`; const S3 = new AWS.S3({ endpoint: spacesEndpoint, accessKeyId: ACCESS_KEY_ID, secretAccessKey: SECRET_ACCESS_KEY }); // 3. Using .putObject() to make the PUT request, S3 signs the request const params = { Body: file.stream, Bucket: BUCKET, Key: file.path }; S3.putObject(params) .on('build', request => { request.httpRequest.headers.Host = `https://${BUCKET}.${REGION}.digitaloceanspaces.com`; // Note: I am assigning the size to the file Stream manually request.httpRequest.headers['Content-Length'] = file.size; request.httpRequest.headers['Content-Type'] = file.mimetype; request.httpRequest.headers['x-amz-acl'] = 'public-read'; }) .send((err, data) => { if (err) logger(err, err.stack); else logger(JSON.stringify(data, '', 2)); }); 为您创建条目(并将其增加为map::operator[])。如果您只想迭代size(),请使用它的迭代器。

std::map

答案 1 :(得分:0)

正如苹果评论的那样,运营商[]创建了条目。参见:

http://www.cplusplus.com/reference/map/map/operator[]/

mapped_type& operator[] (const key_type& k);

如果k与容器中任何元素的键不匹配,则该函数会使用该键插入一个新元素,并返回对其映射值的引用。

如果要检查密钥是否存在,请使用map::find()

答案 2 :(得分:0)

以下是打印地图的一些方法:您可以使用for-each循环或迭代器:

#include <iostream>
#include <map>
#include <random>

using namespace std;

int main()
{
    map<int, int> myMap;

    // filling map with random elements
    random_device rd;
    mt19937 rng(rd());
    uniform_int_distribution<int> uni(0,1000);
    for(int i = 0; i < 10; i++) {
        // uses the [] operator to create an element
        myMap[uni(rng)] = uni(rng);
    }

    // first method to print out map using for-each loop
    for(auto a : myMap) {
        // cannot change elements in map
        cout << a.first << " " << a.second << endl;
    }

    // second method to print out map using iterator
    for(map<int, int>::iterator it = myMap.begin(); it != myMap.end(); it++) {
        // can change elements in map
        cout << it->first << " " << it->second << endl;
    }
}

希望这有帮助! 顺便说一句,在创建字典时,使用map的想法实际上非常聪明,因为map元素会自动排序!我假设您要将strings映射到ints,对吗?