Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <array>
- #include <iostream>
- #include <map>
- #include <string>
- #include <sstream>
- #include <unordered_map>
- #include <vector>
- std::vector<std::string> readFirstLine();
- std::vector<std::string> readLines(std::string& line);
- std::unordered_map<std::string, std::vector<std::string>> generateMap(std::vector<std::string>& header);
- std::unordered_map<std::string, int> mostFrequent(std::vector<std::string>& column);
- void printResult(std::unordered_map<std::string, int>& countFrequent);
- int main()
- {
- std::string line;
- std::vector<std::string> header{ readFirstLine() };
- std::unordered_map<std::string, std::vector<std::string>> table{ generateMap(header) };
- std::string column;
- std::cin >> column;
- std::unordered_map<std::string, int> countFrequent = mostFrequent(table[column]);
- printResult(countFrequent);
- return 0;
- }
- void printResult(std::unordered_map<std::string, int>& countFrequent)
- {
- int biggest{ INT32_MIN };
- std::pair<std::string, int> result;
- std::unordered_map<std::string, int>::iterator iter;
- for (iter = countFrequent.begin(); iter != countFrequent.end(); ++iter)
- {
- if (iter->second > biggest)
- {
- biggest = iter->second;
- result.first = iter->first;
- result.second = biggest;
- }
- }
- std::cout << result.first << " " << result.second << std::endl;
- }
- std::unordered_map<std::string, int> mostFrequent(std::vector<std::string>& column)
- {
- std::unordered_map<std::string, int> countFrequent;
- for (std::string& element : column)
- {
- if (countFrequent.find(element) != countFrequent.end())
- {
- countFrequent[element] = 1;
- }
- countFrequent[element]++;
- }
- return countFrequent;
- }
- std::vector<std::string> readLines(std::string& line)
- {
- std::string word;
- std::istringstream iStr(line);
- std::vector<std::string> properties;
- while (iStr >> word)
- {
- properties.push_back(word);
- }
- return properties;
- }
- std::unordered_map<std::string, std::vector<std::string>> generateMap(std::vector<std::string>& header)
- {
- size_t headerSize{ header.size() };
- std::vector<std::string> properties;
- std::string line;
- std::getline(std::cin, line);
- std::unordered_map<std::string, std::vector<std::string>> table;
- while (line != "end") {
- properties = readLines(line);
- for (size_t i = 0; i < headerSize; ++i)
- {
- table[header[i]].push_back(properties[i]);
- }
- std::getline(std::cin, line);
- }
- return table;
- }
- std::vector<std::string> readFirstLine()
- {
- std::string word;
- std::string line;
- std::vector<std::string> vec;
- std::getline(std::cin, line);
- std::istringstream iStr(line);
- while (iStr >> word)
- {
- vec.push_back(word);
- }
- return vec;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement