vector multimap容器操作小例子

本文介绍了一个使用C++实现的点对点(P2P)文件共享系统,该系统通过客户端发送文件信息到服务器,服务器再将这些信息存储在multimap中并提供给其他客户端检索。具体实现包括自定义文件属性结构、文件信息结构,以及如何通过迭代器操作容器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include "stdafx.h"
#include <vector>
#include <iostream>
#include <numeric>
#include <string>
#include <map>
using namespace std;


typedef struct File_Part
{
string FileSize;   //文件大小
    string  EffectiveTime;//有效时间
    int PortNum;      //端口号
    string  IP;       //IP地址
    string MAC;  //MAC地址


File_Part& operator = (const File_Part& p){
FileSize=p.FileSize;
EffectiveTime=p.EffectiveTime;
PortNum=p.PortNum;
IP=p.IP;
MAC=p.MAC;
return *this;
}

}part;//文件属性


typedef struct File_Client
{
    string FileName; 
    part FileSX; 
 }file_infor;//文件信息


ostream& operator << (ostream& os, const File_Part& p){
os<<p.FileSize<<" "<<p.EffectiveTime<<" "<<p.PortNum<<" "<<p.IP<<" "<<p.MAC;
return os;
}


ostream& operator << (ostream& os, const File_Client& p){
os<<p.FileName<<" "<<p.FileSX;
return os;
}


int  main(int argc,  char* argv[])
{
//client1拥有的文件信息
part p0,p1;
p0.FileSize="5M";
p0.EffectiveTime="2013/6/5";
p0.PortNum=8080;
p0.IP="20.12.15.45";
p0.MAC="01-55-22-4-2-49";


p1.FileSize="4M";
p1.EffectiveTime="2013/6/4";
p1.PortNum=8080;
p1.IP="20.12.15.45";
p1.MAC="01-55-22-4-2-49";

file_infor* q=new file_infor[2];
q[0].FileName="喵.mp3";
q[0].FileSX=p0;
q[1].FileName="啦啦爱.mp3";
q[1].FileSX=p1;




//client2拥有的文件信息
part q0,q1,q2;
q0.FileSize="11M";
q0.EffectiveTime="2013/6/1";
q0.PortNum=8080;
q0.IP="11.17.15.67";
q0.MAC="0A-57-27-42-27-39";


q1.FileSize="4M";
q1.EffectiveTime="2013/6/2";
q1.PortNum=8080;
q1.IP="11.17.15.67";
q1.MAC="0A-57-27-42-27-39";

q2.FileSize="4M";
q2.EffectiveTime="2013/6/3";
q2.PortNum=8080;
q2.IP="11.17.15.67";
q2.MAC="0A-57-27-42-27-39";


file_infor* e=new file_infor[3];
e[0].FileName="啦啦爱.mp3";
e[0].FileSX=q0;
e[1].FileName="你好吗天气好吗.mp3";
e[1].FileSX=q1;
e[2].FileName="爱的海洋.mp3";
e[2].FileSX=q2;


//服务器端:将文件信息输入multimap中,这里假设在每个对等节点中,各个文件都是唯一的,比如:在对等节点1中不存在两个"喵.mp3"
multimap<string,part> contine;
typedef multimap<string,part>::iterator iter;
for(int j=0;j<2;j++)
{
contine.insert(make_pair(q[j].FileName,q[j].FileSX));
}
for(int w=0;w<3;w++)
{
contine.insert(make_pair(e[w].FileName,e[w].FileSX));
}



//服务器端:将收到的文件信息全部打印
iter cont_iter;
cont_iter=contine.begin();
while(cont_iter!=contine.end())
{
cout<<cont_iter->first<<" "<<cont_iter->second<<endl;
cont_iter++;
}


//服务器端:根据文件名检索文件属性,并放入client_receive容器中
string s="啦啦爱.mp3";
vector<part> client_receive;

iter output1,output2;
output1=contine.lower_bound(s);
output2=contine.upper_bound(s);
while(output1!=output2)
{
//cout<<output1->second<<endl;
client_receive.push_back(output1->second);
output1++;
}


//对等节点端:对收到的信息进行提取
vector<part>::iterator t=client_receive.begin();
while(t!=client_receive.end())
{
cout<<t->IP<<endl;
t++;
}



system("pause");
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值