【发布时间】:2016-11-27 15:44:27
【问题描述】:
我有一个模拟二维向量的一维字符向量(这是一个要求)。这个向量是 000111,它相当于一个 2D 的 vector[0] = 000 和 vector[1] = 111。所以它有两个字符串,长度相同(在这种情况下为 3)。我想将每个字符串设置为std::unordered_map 中的键,所以我这样做:
#include <iostream>
#include <unordered_map>
#include <string>
#include <vector>
int main ()
{
std::unordered_map<std::string, int> mymap;
std::vector<char> keys(2 * 3); // 2 keys, each one of length 3
for(int i = 0; i < 2; ++i)
{
for(int j = 0; j < 3; ++j)
{
keys[j + i * 3] = (i) ? '1' : '0';
}
}
// keys = 000111
for(int i = 0; i < 2; ++i)
{
mymap[std::string(keys.begin() + i * 3, keys.begin() + (i + 1) * 3)] = i;
}
for (auto& x: mymap) {
std::cout << x.first << ": " << x.second << std::endl;
}
/*
Output:
111: 1
000: 0
*/
return 0;
}
这让我很不开心,因为我必须构造一个新字符串,然后将其插入到地图中。如果我能一步到位就可以了。可以吗?
【问题讨论】:
-
“建筑很差?” 是的。
char(0) != '0' -
我很傻@BaummitAugen,你是对的,我更新了问题,请重新阅读! :)
-
@gsamaras 和以前一样的问题。 ;) 试试
keys[j + i * 3] = (i) ? '1' : '0'; -
你可以使用
<string_view>吗? en.cppreference.com/w/cpp/header/string_view你也可以滚动你自己的string_view。 -
这让我很不开心,因为我必须构造一个新的字符串 不要让这样的愚蠢事情影响你的幸福。如果您因为程序的性能比预期的差 10% 而感到沮丧,我可以理解您,但不是因为您无法避免对性能的影响未知且可能可以忽略不计的操作。
标签: c++ string vector data-structures hashtable