A имеет вектор строк в c ++:
vector<string> myVect = {"A", "A", "A", "B", "B", "A", "C", "C", "foo", "A", "foo"};
Как я могу преобразовать это в вектор целых чисел, чтобы каждое целое число однозначно соответствовало строке в myVect
?т.е. я хотел бы вектор
out = {0, 0, 0, 1, 1, 0, 2, 2, 3, 0, 3}
Кроме того, я хотел бы вектор уникальных строк, каждая позиция, соответствующая числу в out
:
uniqueStrings = {"A", "B", "C", "foo"}
ПокаУ меня есть следующее:
vector<string> uniqueStrings; // stores list of all unique strings
vector<int> out(myVect.size());
for (int i = 0; i < myVect.size(); ++i)
{
// seeing if this string has been encountered before
bool assigned = false;
for (int j = 0; j < uniqueStrings.size(); ++j)
if (!myVect.at(i).compare( uniqueStrings.at(j) ))
{
out.at(i) = j;
assigned = true;
break;
}
// if not, add new example to uniqueStrings
if (!assigned)
{
uniqueStrings.push_back(myVect.at(i));
out.at(i) = uniqueStrings.size();
}
}
Это работает, но наверняка должен быть лучший способ?