我有一个包含10000行2的IP地址 “129.151.102.150 119.128.105.153”什么是打印出无序地图的好方法?
什么,这代表的是第一个IP地址与正确的等连接的大量文本文件。在这个文本文件中有多次连接的IP地址。所以我想要做的就是打印出连接最多的前10个IP地址。我的方法就是用这种方式在无序地图中填充文本文件的内容。然后我创建了一个结构,其中包含该任务所需的所有数据。然后我还创建了一个类priority_queue的对象。我的问题是,当我试图把它打印出来它这样做,但只有相同的IP地址显示出来,例如10倍控制台窗口输出显示“129.151.102.150:1” 10次,其中1代表,它连接一次。
struct data_pq
{
string key;
unordered_map<string, char> v;
data_pq()
{
key = "";
}
data_pq(string key, unordered_map<string, char> v)
{
this->key = key;
this->v = v;
}
friend bool operator<(const data_pq& leftop, const data_pq& rightop)
{
return leftop.v.size() < rightop.v.size();
}
};
class kommunikation3_3{
private:
unordered_map<string, unordered_map<string, char>> m;
priority_queue<data_pq>pq;
public:
kommunikation3_3(){}
~kommunikation3_3(){}
void readfile(string file_name)
{
ifstream fin(file_name);
string strRow;
while (getline(fin, strRow))
{
istringstream iss(strRow);
string ip1, ip2;
getline(iss, ip1, ' ');
getline(iss, ip2);
//vad gör de här två rader?????????????
m[ip1][ip2];
m[ip2][ip1] = '-';
fin.close();
}
//Denna loop pushar information om första o andra deleln:
for (auto it = m.begin(); it != m.end(); ++it)
{
pq.push(data_pq(it->first, it->second));
}
}
void print(int n)
{
for (size_t i = 0; i < n; i++)//n=10
{
cout << pq.top().key << ":" << pq.top().v.size() << endl;
}
pq.pop();
}
};
我主要看起来像这样
cout << "top ten connections" << endl;
kommunikation3_3 m;
m.readfile("ip3.txt");
m.print(10);
你'for'循环打印这样的: “COUT << pq.top()键<< ”:“ << pq.top()v.size()<< ENDL;”。没有什么会使用循环索引变量'size_t i',因为它总是会在循环的每次迭代中打印相同的内容。你的整体逻辑很纠结,所以不清楚循环应该打印什么,但这就是为什么你每次都看到相同的东西打印。 –