刚开始学C++ SLT,请各位指点,怎么样使用C++ STL中的map容器输出容器中key和value之间的关

C++语言 码拜 8年前 (2016-04-09) 1056次浏览
请给出实际可运行的例子
问题描述如下:
map怎么样通过key和value之间的关系输出本人想要的特定关系。
形式如:
typedef map<string,string> set_map;
set_map set_str;
set_str[“a”]=”str1″;
set_str[“p”]=”a”;
set_str[“e”]=”p”;
set_str[“t”]=”e”;
set_str[“b”]=”str2″;
set_str[“q”]=”b”;
set_str[“c”]=”str3″;
set_str[“i”]=”c”;
set_str[“j”]=”i”;
既map中装的原始数据为:
a=str1
p=a
e=p
t=e

b=str2
q=b

c=str3
i=c
j=i
输出为:
t=str1
q=str2
j=str3

解决方案

10

对于 map 中任意键值对 p1(k1, v1) ,寻找 p2(v1, v2)
-若未找到,另取一键值对
-若找到,修改 p1 为 (k1, v2) ,并从 map 中删除 p2
重复以上步骤到 map 不再变动

template <typename T>
bool SolveMapSingle(map<T, T>& edges, typename map<T, T>::key_type const& k)
{
    bool solved = false;
    typename map<T, T>::iterator i;
    while ((edges.find(k) != edges.end()) && (i = edges.find(edges[k])) != edges.end())
    {
        edges[k] = i->second;
        edges.erase(i);
        solved = true;
    }
    return solved;
}
template <typename T>
void SolveMap(map<T, T>& edges)
{
    if (edges.size() > 1)
    {
        size_t i = 0;
        do
        {
            while (SolveMapSingle(edges, next(edges.begin(), i)->first)) { i = 0; }
        } while (++i != edges.size());
    }
    for (auto&& p : edges)
    {
        cout << p.first << " = " << p.second << endl;
    }
}

10

#include <iostream>
#include <string>
#include <map>
#include <set>
#include <list>
using namespace std;
typedef set<string> str_key;
typedef map<string, string> set_map;
set_map set_str;
set_map map_set_value()
{
//set_str str;
set_str[“a”] = “str1”;
set_str[“p”] = “a”;
set_str[“e”] = “p”;
set_str[“t”] = “e”;
//输出为:e=str1
set_str[“b”] = “str2”;
set_str[“q”] = “b”;
//输出为:b=str2
set_str[“c”] = “str3”;
set_str[“i”] = “c”;
set_str[“j”] = “i”;
//输出为:j=str3
return set_str;
}
bool Deal(set_map& value)
{
for(set_map::iterator iter = value.begin();iter != value.end(); iter++)
{
if (value.find(iter->second) != value.end())
{
string temp = iter->second;
value[iter->first] = value[iter->second];
value.erase(temp);
if (Deal(value))
return true;
return false;
}
}
return true;
}
int main()
{
set_map sm = map_set_value();
Deal(sm);
for (set_map::iterator iter = sm.begin(); iter != sm.end(); iter++)
{
cout << “key:” << iter->first << ”   value:” << iter->second << endl;
}
system(“pause”);
return 0;
}
用了个简单的递归

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明刚开始学C++ SLT,请各位指点,怎么样使用C++ STL中的map容器输出容器中key和value之间的关
喜欢 (0)
[1034331897@qq.com]
分享 (0)