gpt4 book ai didi

c++ - 从两个不同的数据结构将数据插入 std::map mymap 并通过套接字发送

转载 作者:行者123 更新时间:2023-11-30 01:57:33 26 4
gpt4 key购买 nike

我已经声明了 map :

std::map <std::string, int> mymap;

我想在上面的 map 中插入两个值*vithit->first 然后通过socket发送和接收。

我的代码:

for (std::map < int, std::vector < std::string > >::iterator hit = three_highest.begin(); hit != three_highest.end(); ++hit) {

for (std::vector < std::string >::iterator vit = (*hit).second.begin(); vit != (*hit).second.end(); vit++) {
std::cout << hit->first << ":";
std::cout << *vit << "\n";
mymap.insert( std::pair<std::string,int> (*vit,hit->first)); //Is it correct way
}
}

//然后通过socket发送

if ((bytecount = send(*csock, mymap ,  sizeof(mymap), 0)) == -1) { // I think this is wrong, Can someone correct it?
fprintf(stderr, "Error sending data %d\n", errno);
goto FINISH;
}

在接收端如何取回这两个变量?

std::map <std::string, int> mymap;
if((bytecount = recv(hsock, mymap, sizeof(mymap), 0))== -1){ //Needs help here also

// getting mymap->first, mymap->second.

fprintf(stderr, "Error receiving data %d\n", errno);
}

最佳答案

正如我在评论中所说,任何包含指针、文件/套接字句柄和类似内容的数据结构都不能通过网络发送或保存到文件中。至少不是没有任何一种 marshallingserialization .

在您的情况下,它可以简单一半。您需要做的第一件事是发送 map 的大小,即其中的条目数。这有助于在接收方重新创建 map 。

然后你可以先发送所有的键,然后是所有的值。发送值很简单,只需将它们放在 std::vector 中并使用例如std::vector::data获取指向实际数据的指针。发送 key 有点复杂(因为它们可能有不同的长度)。对于 key ,您可以创建一个足够大的固定大小数组来容纳所有 key 字符串,然后发送它。或者您可以一个接一个地发送每个 key ,接收方检查字符串终止符。或者一个一个地发送字符串,首先是字符串的长度,然后是实际的字符串。

关于c++ - 从两个不同的数据结构将数据插入 std::map <std::string, int> mymap 并通过套接字发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18609827/

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