我正在尝试使用类来创建字典<键,值>在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中可用于此目的的任何其他类别?
答案 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
,对吗?