使用C++写出某种聊天工具,每个好友的id都是唯一的,当用户接收到信息后,如果会话窗口之前没有与该好友的聊天信息,则在通信列表里,会将新接收的消息的好友id置顶,如果会话窗口中已有与该好友的聊天信息,则将该好友的id移动到通讯列表的顶端。请根据要求实现该功能。 输入:第一行为整数N,代表有N组测试数据,接下来的N组测试中,第一行为整数T,代表有T条通讯,第二行有T个整数,按时间先后顺序表示接收到讯息的好友id。 输出:按照通讯列表从上到下的顺序输出好友id,每个id以空格分隔。
时间: 2024-02-11 18:09:19 浏览: 146
C++实现的聊天功能
4星 · 用户满意度95%
以下是一个使用C++实现的例子,使用一个`vector`来存储好友id和他们的最近通信时间,然后根据最近通信时间进行排序:
```c++
#include <iostream>
#include <algorithm>
#include <vector>
#include <unordered_map>
using namespace std;
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
int t;
cin >> t;
vector<pair<int, int>> friends(t); // 存储好友id和最近通信时间的vector
unordered_map<int, int> last_communication; // 记录每个好友的最近通信时间
for (int j = 0; j < t; j++) {
int friend_id;
cin >> friend_id;
friends[j] = make_pair(friend_id, j);
last_communication[friend_id] = j;
}
// 根据好友的最近通信时间进行排序
sort(friends.begin(), friends.end(), [](auto const& a, auto const& b) {
return a.second > b.second;
});
// 输出排序后的好友id
for (auto const& f : friends) {
cout << f.first << " ";
}
cout << endl;
}
return 0;
}
```
在这个例子中,我们首先读入测试数据的数量`n`,然后对于每组测试数据,读入通信数量`t`和每个好友的id。我们使用一个`vector<pair<int, int>>`来存储好友id和他们的最近通信时间,以及一个`unordered_map<int, int>`来记录每个好友的最近通信时间。然后,我们使用`sort`函数对`friends`进行排序,排序的依据是最近的通信时间,最近通信时间越晚的好友在列表中越靠上。最后,我们将排序后的好友id输出即可。
阅读全文