Функция подсчета unordered_set возвращает неправильное значение - PullRequest
0 голосов
/ 02 марта 2020

Почему set.count('a') выводит 1 при 3 a?

Программа:

bool isAnagram(string s, string t) {

    unordered_set<char> set;

    for(int i=0; i<s.size(); i++){
        set.insert(s[i]);
    }

    cout << endl << set.count('a') << endl;
    return false;
}

Ввод:

s = 'anagram'

Выход:

1

Ответы [ 2 ]

7 голосов
/ 02 марта 2020

В наборе только один a. Если вам нужно несколько a s, вам нужно использовать multiset.

Пример:

#include <iostream>
#include <set>
#include <string>

size_t count_char(const std::string& s, char ch) {
    // fill the set directly using the strings begin and end iterators
    std::multiset<char> set(s.begin(), s.end());

    return set.count(ch);
}

int main() {
    std::cout << count_char("anagram", 'a') << '\n';
}

Выход:

3
1 голос
/ 02 марта 2020

Вы должны указать диапазон в функции подсчета:

count (InputIterator first, InputIterator last, const T& val)

Пример:

#include <iostream>
#include <algorithm>
using namespace std;

int main(){
    string s= "anagram";

    cout << count(s.begin(), s.end(), 'a') << endl;
    return 0;
}

Выход:

3
...