#include <iostream> #include <map> using namespace std; const int N=1e6; map<string,int>mapp; map<int,string>value; int f[N],n,idex; int get(string t) { if(mapp[t]==0) { mapp[t]=++idex; value[idex]=t; } return mapp[t]; } int find(int x) { if(x!=f[x]) f[x]=find(f[x]); return f[x]; } int main() { for(int i=1;i<=1e6;++i) f[i]=i; string t,back=""; while(cin >> t) { if(t[0]=='$') break; char ar=t[0];string arr=t.substr(1); if(ar=='?') { // cout << arr << ' ' << find(get(arr)) << endl; //# cout << arr << ' ' << value[find(get(arr))] << endl; //# continue; } if(ar=='#') back=arr; else f[get(arr)]=find(get(back)); } }
时间: 2024-04-20 09:23:57 浏览: 73
这是一个简单的代码片段,它使用了`map`和`union-find`算法来处理字符串之间的关系。具体来说,它构建了一个映射表,将每个字符串与一个唯一的整数值关联起来。然后,它使用`union-find`算法来维护字符串之间的连接关系。当输入一个以`?`开头的查询时,它会返回与查询字符串相连的字符串。当输入一个以`#`开头的字符串时,它会将该字符串与上一个字符串相连。
请问你对这段代码有什么疑问吗?
相关问题
C++ 找出map<string,int>M中的最小值
可以使用迭代器遍历map中的所有键值对,然后比较每个值,找到最小值。示例代码如下:
```c++
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
map<string, int> M{{"apple", 3}, {"banana", 2}, {"orange", 5}, {"mango", 1}};
int min_val = INT_MAX; // 初始化最小值为正无穷大
for (auto const& [key, val] : M) {
if (val < min_val) {
min_val = val;
}
}
cout << "The minimum value in the map is " << min_val << endl;
return 0;
}
```
输出结果为:
```
The minimum value in the map is 1
```
阅读全文