gpt4 book ai didi

c++ - 如何按第一个字符串对字符串对的 vector 进行分组?

转载 作者:太空狗 更新时间:2023-10-29 19:59:16 26 4
gpt4 key购买 nike

我有一个包含字符串对的 vector :

vector<pair<string, string>> list;

我想对具有相同 list[n].firstlist[n].second 字符串进行分组

const size_t nbElements = list.size();
for (size_t n = 0; n < nbElements ; n++)
{
const string& name = list[n].first;
const string& type = list[n].second;
}

考虑这个例子:

(big; table) (normal; chair) (small; computer) (big; door) (small; mouse)

将导致:

(big; table, door) (normal; chair) (small; computer, mouse)

你知道怎么做吗?

最佳答案

你可以使用 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, ", ");
}
}

The output is:

(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;

关于c++ - 如何按第一个字符串对字符串对的 vector 进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14218488/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com