
Question:
For a project in C++ (I'm relatively new to this language) I want to create a structure which stores a given word and a count for multiple classes. E.g.:
struct Word
{
string word;
int usaCount = 0;
int canadaCount = 0;
int germanyCount = 0;
int ukCount = 0;
}
In this example I used 4 classes of countries. In fact there are hundreds of country classes.
My questions regarding this are the following:
<ol><li>Is there any way to generate this list of countries dynamically? (E.g. there is a file of countries which is read and on that basis this struct is generated)</li> <li>Fitting for this struct should be a function which increments the count if the class is seen. Is there also a way to make this "dynamic" by which I mean that I want to avoid one function per class (e.G.: incUsa(), incCanada(), incGermany() etc.)</li> <li>Since I'm not really used to C++: Is this even the ideomatic approach to it? Perhaps there's a better data structructure or an alternative (and more fitting) way to result the problem.</li> </ol>Thanks in advance.
Answer1:In C++ class
and struct
definitions are statically created at compile time, so you can't, for example, add a new member to a struct
at runtime.
For a dynamic data structure, you can use an associative container like <a href="http://en.cppreference.com/w/cpp/container/map" rel="nofollow"><strong>std::map
</strong></a>:
std::map<std::string, int> count_map;
count_map["usa"] = 1;
count_map["uk"] = 2;
etc...
You can include count_map
as a member in the definition of your struct Word
:
struct Word
{
std::string word;
std::map<std::string, int> count_map;
};
Answer2:Consider std::map. You could create a map of countries to a map of words to counts. Or a map words to a map of countries to counts. Whether you use an enum or strings for your country codes is up to you.