gpt4 book ai didi

c++ - 使用 C++ 中的 vector 散列/映射自动聚类

转载 作者:太空宇宙 更新时间:2023-11-04 15:54:22 26 4
gpt4 key购买 nike

例如,我有以下值:

0 0 0 1 3 2

这些值指的是cluster Ids,其中cluster的成员是 vector 的索引。因此我们想要得到这样的输出:

Cluster 0 -> 0,1,2
Cluster 1 -> 3
Cluster 2 -> 5
Cluster 3 -> 4

我尝试了以下构造,但它似乎不起作用:有什么办法吗?

#include <iostream>      
#include <vector>
#include <fstream>
#include <sstream>
#include <map>
using namespace std;

int main ( int arg_count, char *arg_vec[] ) {
if (arg_count !=2 ) {
cerr << "expected one argument" << endl;
return EXIT_FAILURE;
}

string line;
ifstream myfile (arg_vec[1]);

map <int, vector <int> > CCTagMap;

if (myfile.is_open())
{
// Skip First Line
getline(myfile,line);

while (getline(myfile,line) )
{
stringstream ss(line);
int CcId;
int TagId = -1;



vector <int> Temp;

while (ss >> CcId) {
TagId++;
cout << CcId << "-" << TagId << endl;

# this way to cluster doesn't seem to work
CCTagMap.insert(make_pair(CcId,Temp.push_back(TagId)));
}


}
myfile.close();
}
else { cout << "Unable to open file\n";}
return 0;
}

最佳答案

您每次在插入过程中都会覆盖 vector 。你可以做的是:

map <int, vector <int> >::iterator iter = CCTagMap.find(CcId);
if(iter == CCTagMap.end())
{
vector <int> Temp;
temp.push_back(TagId);
CCTagMap[CcId] = temp;
}
else
{
iter->second.push_back(TagId);
}

关于c++ - 使用 C++ 中的 vector 散列/映射自动聚类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2018744/

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