Чтобы отобразить std::string
s на целые числа, вы можете использовать std::unordered_map<std::string,int>
. Если вы хотите отобразить std::string
s на некоторую накопленную сумму целых чисел, это будет std::unordered_map<std::string,std:::vector<int>>
, обернутый в вспомогательный класс для реализации логики c накопленной суммы:
#include <string>
#include <vector>
#include <iostream>
#include <unordered_map>
struct cumsummap {
std::unordered_map<std::string,std::vector<int>> data;
std::vector<int> history;
void add(const std::string& key, int value) {
auto& v = data[key];
int sum = (v.size() == 0) ? value : v.back() + value;
v.push_back(sum);
history.push_back(sum);
}
void print() {
for (auto& p : data) {
std::cout << p.first << " : ";
for (auto& cumsum : p.second) std::cout << cumsum << " ";
std::cout << '\n';
}
for (auto& h : history) {
std::cout << h << ' ';
}
}
};
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
5 6 8 11
Примечание. Вопрос и ответ прошли историю разъяснений, поэтому существует карта векторов, когда для получения последней строки выходных данных достаточно карты int
s.
PS: Обратите внимание, что важно не путать задачу, которую вы хотите решить, и подробности реализации решения, которое вы имеете в виду. «Так что я хочу, чтобы накопленная сумма соответствующих строк в одном массиве в их соответствующей позиции вхождения». это не точно , что делает приведенный выше код. Также нет видимых хэшей, уникальных целых чисел, и я понятия не имею, что вы имеете в виду под «[...] я хочу преобразовать этот уникальный int в правильную строку, связанную с ним». Тем не менее, я надеюсь, что вышеупомянутое достаточно близко, чтобы хотеть, чтобы вы действительно захотели это сделать.
PPS: «нет никакого способа сделать простой способ без использования STL». Я должен еще раз упомянуть, что использование стандартной библиотеки - это «легкий путь». Я не обучен написанию своих собственных контейнеров, поэтому моя осторожная оценка состоит в том, что написание вышеупомянутого без использования стандартной библиотеки будет> 300 строк кода с неисчислимым количеством ошибок.