あなたは使用することができますstd::map
例:
#include <boost/algorithm/string/join.hpp>
#include <boost/format.hpp>
#include <iostream>
#include <map>
#include <vector>
int main() {
// define original data
std::vector<std::pair<std::string, std::string> > v =
{{"a", "b"}, {"a", "c"}, {"b", "a"}, {"b", "d"}, {"c", "e"}};
// populate map
std::map<std::string, std::vector<std::string> > grouped;
for (auto it = v.begin(); it != v.end(); ++it) {
grouped[(*it).first].push_back((*it).second);
}
// output
for (auto it = grouped.begin(); it != grouped.end(); ++it) {
std::cout << boost::format("(%s: %s)\n")
% (*it).first
% boost::algorithm::join((*it).second, ", ");
}
}
出力は次のとおりです。
(a: b, c)
(b: a, d)
(c: e)
このコードは C++11 の機能 (初期化リスト、auto キーワード) を利用していることに注意してください。コンパイルの成功については、上記のリンクされた例をご覧ください。
これを自分でコンパイルするには、使用するコンパイラがこれらの機能をサポートしていることを確認するか、適切な C++03 の同等のものに置き換えてください。
たとえば、イテレータの型は次のauto
とおりです (上記のコードでキーワードを使用して美化されています)。
// the iterator on the vector `v`
std::vector<std::pair<std::string, std::string> >::iterator it_v;
// the iterator on the map `grouped`
std::map<std::string, std::vector<std::string> >::iterator it_grouped;