5
回答
初学C++ SLT,请各位大神指点,如何使用C++ STL中的map容器输出容器中key和value之间的关系
科大讯飞通用文字识别100000次/天免费使用。立即申请   
请给出实际可运行的例子
问题描述如下:
map如何通过key和value之间的关系输出自己想要的特定关系。
形式如:
#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";
//输出为:t->a
 set_str["b"]="str2"
 set_str["s"]="b"
 set_str["q"]="m"
 set_str["m"]="s"
输出为:q->b
set_str["c"]="str3";
set_str["i"]="c";
set_str["j"]="i";
//输出为:j->c
return set_str;
}
int main()
{
set_map sm=map_set_value();
/*
        处理语句
       */
system("pause");
return 0;
}

既map中装的原始数据为:
    a=str1
    p=a
    e=p
    t=e
   
   b=str2
   s=b
  q=m
   m=s
  
    c=str3
     i=c
     j=i
输出为:
   t->a
   q->b
    j->c

更多 0 分享到:
举报
inkred
发帖于2年前 5回/499阅
共有5个答案 最后回答: 2年前

我发现没问题啊,你用迭代器了吗

遍历的时候加

 map<string,string>::iterator it;


    for(it=sm.begin();it!=sm.end();++it)
        cout<<"key: "<<it->first <<" value: "<<it->second<<endl;

--- 共有 10 条评论 ---
xpbob回复 @inkred : 返回的是字符串,你接收不了? 2年前 回复
inkred回复 @xpbob : 用不了 2年前 回复
xpbob回复 @inkred : 在你想输出的地方,或者想要出现这个数据的地方sm[sm["j"]]这个的值就是j对应的那个 2年前 回复
inkred回复 @xpbob :放在什么位置? 2年前 回复
xpbob回复 @inkred : sm[sm["j"]]就行 2年前 回复

楼主的问题没有表述清楚,我大概理解了下,不知道对不对。

楼主你是想要?

1.通过给一个【键】,然后这个【键】找到一个【值】。

2.如果这个【值】代表了一个【键】,则重复1

3.如果1.中找到的【值】是【结果字符串】strN就结束

如果楼主要的是这样的结果的话,

只要区分哪些【值】代表的是【键】,哪些代表是【结果字符串】

然后循环地键值查找,到最后是【结果字符串】就停止就可以了。

--- 共有 1 条评论 ---
inkred是这意思,但不懂如何处理 2年前 回复
难怪C++会被这么多人骂? 感觉楼主的这种代码就是那种烂代码。楼主别介意,我就是想说下看法,没有攻击你意思
--- 共有 1 条评论 ---
inkred那你写一下示例给我看看,谢谢 2年前 回复
struct value_t {
    bool undone;//是否只是一个键,还需要往下找
    string value;//值
    value_t(string v):undone(true),value(v){}
    value_t(string v,bool u):undone(u),value(v){}
};

typedef map<string,value_t> map_t;//你那个set_map区分【键】或【结果】的版本

map_t dict = {
    { "a", {"str1",false} },//在是结果字符的时候吧undone设置成false
    { "p", {"a"} },
    { "e", {"p"} },
    { "t", {"e"} },
};

string get_result(map_t &dict,string key){
    while(dict[key].undone){
        key = dict[key].value;
    }
    return dict[key];
}

string result = get_result(dict,"t");//这样t 就找到 str1

上面是个大概上的代码,逻辑上就是上面那样,我没有调试这代码。

value_t就是用来区分【值】到底是【键】还是【结果】的。

map_t 取代了你那个set_map类型。

dict 是个就是用于查找的字典。

get_result逻辑很简单,

只要undone是ture代表【键】就继续找,

undone是false代表【结果】就返回。

--- 共有 2 条评论 ---
大止刀口回复 @inkred : 要a的话 return dict[key];这句换成return key;就可以了 2年前 回复
inkred您搞错了,我是要找t->a,不是t->str1,若是t->str1我可以实现 2年前 回复
顶部