#include <iostream>
#include <vector>
#include <string>
#include <cstring>
template <typename T>
std::size_t count(const std::vector<T> & _v, const T&& _value)
{
std::size_t cnt = 0;
for (const auto& it : _v)
{
if (it == _value) ++cnt;
}
return cnt;
}
template<>
std::size_t count(const std::vector<const char *> & _v, const char * const && _value)
{
std::size_t cnt = 0;
for (const auto& it : _v)
{
if (strcmp(it, _value) == 0) ++cnt;
}
return cnt;
}
int main()
{
std::vector<int> vi = { 0, 1, 7, 13, 7, 9, 14, 7, 7 };
std::vector<double> vd = { 0, 1, 0, 1, 1, 1, 0 };
std::vector<std::string> vs = { "abc", "d", "e", "abc", "f", "abc", "abc" };
std::vector<const char *> vpc = { "abc", "d", "e", "abc", "f", "abc", "abc" };
std::cout << count(vi, 7) << std::endl;
std::cout << count(vs, std::string("abc")) << std::endl;
std::cout << count(vd, 1.0) << std::endl;
const char * search = "abc";
std::cout << count(vpc, search) << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8Y3N0cmluZz4KCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RkOjpzaXplX3QgY291bnQoY29uc3Qgc3RkOjp2ZWN0b3I8VD4gJiBfdiwgY29uc3QgVCYmIF92YWx1ZSkKewoJc3RkOjpzaXplX3QgY250ID0gMDsKCWZvciAoY29uc3QgYXV0byYgaXQgOiBfdikKCXsKCQlpZiAoaXQgPT0gX3ZhbHVlKSArK2NudDsKCX0KCXJldHVybiBjbnQ7Cn0KCnRlbXBsYXRlPD4Kc3RkOjpzaXplX3QgY291bnQoY29uc3Qgc3RkOjp2ZWN0b3I8Y29uc3QgY2hhciAqPiAmIF92LCBjb25zdCBjaGFyICogY29uc3QgJiYgIF92YWx1ZSkKewoJc3RkOjpzaXplX3QgY250ID0gMDsKCWZvciAoY29uc3QgYXV0byYgaXQgOiBfdikKCXsKCQlpZiAoc3RyY21wKGl0LCBfdmFsdWUpID09IDApICsrY250OwoJfQoJcmV0dXJuIGNudDsKfQoKCmludCBtYWluKCkKewoJc3RkOjp2ZWN0b3I8aW50PiB2aSA9IHsgMCwgMSwgNywgMTMsIDcsIDksIDE0LCA3LCA3IH07CglzdGQ6OnZlY3Rvcjxkb3VibGU+IHZkID0geyAwLCAxLCAwLCAxLCAxLCAxLCAwIH07CglzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdnMgPSB7ICJhYmMiLCAiZCIsICJlIiwgImFiYyIsICJmIiwgImFiYyIsICJhYmMiIH07CglzdGQ6OnZlY3Rvcjxjb25zdCBjaGFyICo+IHZwYyA9IHsgImFiYyIsICJkIiwgImUiLCAiYWJjIiwgImYiLCAiYWJjIiwgImFiYyIgfTsKCglzdGQ6OmNvdXQgPDwgY291bnQodmksIDcpIDw8IHN0ZDo6ZW5kbDsKCXN0ZDo6Y291dCA8PCBjb3VudCh2cywgc3RkOjpzdHJpbmcoImFiYyIpKSA8PCBzdGQ6OmVuZGw7CglzdGQ6OmNvdXQgPDwgY291bnQodmQsIDEuMCkgPDwgc3RkOjplbmRsOwoKCWNvbnN0IGNoYXIgKiBzZWFyY2ggPSAiYWJjIjsKCXN0ZDo6Y291dCA8PCBjb3VudCh2cGMsIHNlYXJjaCkgPDwgc3RkOjplbmRsOwp9