#c #while-loop #binary-search-tree #ifstream #sstream
#c #цикл while #двоичное дерево поиска #ifstream #sstream
Вопрос:
У меня есть файл, который выглядит следующим образом:
a
a
a
a
b
b
c
d
d
d
Я использую fstream и sstream чтобы прочитать его, и чего я хочу добиться-это, чтобы прочитать это подсчитывать, сколько раз один элемент повторяется, так что я могу добавить узел в по британскому летнему времени с повторением считать своим ключом.
Я надеюсь добиться чего-то подобного:
myBST.insert("a", 4);
myBST.insert("b", 2);
myBST.insert("c", 1);
myBST.insert("d", 3);
Я попытался создать цикл while с новым sstream, где основной цикл находит элемент, подсчитывая, сколько раз значение, считываемое новым sstream, совпадает с исходным sstream, но, похоже, это не работает:
if (!datos.is_open())
{
cout << "failed to open";
}
string line;
while (getline(datos, line))
{
stringstream ss(line);
int count = 0;
string line2 = line;
stringstream ss2(line2);
while (line2 == line)
{
stringstream ss2(line2);
count ;
}
}
return 0;
Любая помощь приветствуется 🙂
Комментарии:
1. Вы могли бы использовать, например
std::unordered_map
, для отслеживания «повторений». Используйте входные данные из файла в качестве ключа, а счетчик — в качестве данных. Тогда вы можете просто сделатьmap[line]
. А затем выполните итерацию по карте, и у вас будут строки и повторения.2. Это может сработать, но я также должен отслеживать, когда он перестает повторяться
3. я также должен отслеживать, когда он перестает повторяться , это именно то, чего
map[line]
можно достичь. Всякий раз, когда происходит неповторениеline
map[line]
, будет вставляться новоеstd::pair(line, 0);
, которое затем увеличивается в первый раз. Пожалуйста, прочитайте еще раз, как работает std::unordered_map::operator[] : Возвращает ссылку на значение, которое сопоставляется с ключом, эквивалентным ключу, выполняя вставку, если такой ключ еще не существует.4. я также должен отслеживать, когда он перестает повторяться , или это означает, что вы хотите что-то сделать в этом случае (например, сохранить или распечатать номер текущей строки)? Это также просто:
if ( map[line] == 1) { /* non-repeated line occurred */ }
.5. Если вы хотите сохранить порядок сортировки, я бы предпочел
std::map
overstd::unordered_map
: Demo на coliru