在我的项目中,需要唯一标识字符串。我想知道是否有任何简便的方法来表示具有唯一整数值的唯一字符串。也许它与字符的ASCII值有关,但是我不知道该怎么做。例如:我希望字符串“ ankit”以唯一值表示。此唯一的整数值应仅表示字符串“ ankit”。我也想将此唯一的int转换为与之关联的正确字符串。我希望你明白。如果没有,你可以问。
最大字符串长度是32。
例如:
假设我们有4个字符串。值为"ankit"
的5
。下一个输入是"John"
,其值为6
。下一个输入是"ankit"
,其值为3
,而不是"ankit"
,其值为3
。因此,我想将相应字符串的累积总和存储在它们各自出现位置的单个数组中。
这里将创建一个大小为n(字符串数)的数组。 arr[n]
它将存储arr[0]=5
,arr[1]=6
,arr[2]=8
,arr[3]=11
。
要将std::string
映射为整数,可以使用std::unordered_map<std::string,int>
。如果要将std::string
映射到某个整数的累积和,则将其包装为帮助器类以实现累积和的逻辑,即为std::unordered_map<std::string,std:::vector<int>>
:
#include <string>
#include <vector>
#include <iostream>
#include <unordered_map>
struct cumsummap {
std::unordered_map<std::string,std::vector<int>> data;
void add(const std::string& key, int value) {
auto& v = data[key];
if (v.size() == 0) {
v.push_back(value);
} else {
v.push_back( v.back() + value );
}
}
void print() {
for (auto& p : data) {
std::cout << p.first << " : ";
for (auto& cumsum : p.second) std::cout << cumsum << " ";
std::cout << '\n';
}
}
};
int main()
{
cumsummap c;
c.add("ankit",5);
c.add("john",6);
c.add("ankit",3);
c.add("ankit",3);
c.print();
}
输出:
john : 6
ankit : 5 8 11
PS:请注意,不要混淆要解决的任务和要考虑的解决方案的实现细节,这一点很重要。 “所以我想将相应字符串的累积和存储在它们各自出现位置的单个数组中。”多数民众赞成在上面的代码不是exactly。也没有可见的哈希,没有唯一的整数,我也不知道“ [...]我要将此唯一的int转换为与它关联的正确字符串”的意思。不过,我希望以上内容足够接近您希望实际执行的操作。