map、list函数

xidianxiancai 2009-07-27 12:03:25
定义一个map对象,将单词与一个list对象关联起来,该list对象存储对应的单词可能出现的行号。最后输出这个map对象。
这个该如何实现呢?
...全文
146 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xidianxiancai 2009-07-28
  • 打赏
  • 举报
回复
#include <iostream>
#include <list>
#include <vector>
#include <string>
#include <deque>
#include <cctype>
#include <map>
#include <set>
using namespace std;
using std::string;
using std::vector;
using std::list;
using std::deque;
using std::cout;
using std::endl;
using std::pair;
using std::map;
using std::set;

int main()
{
map <string, list<int> > words;
words["abc"].push_back(1);
for (map <string, list<int> >::iterator iter=words.begin(); iter!=words.end(); ++iter)
{
cout << "words:" << iter->first << " line:";
for (list<int>::iterator it=(iter->second).begin(); it!=(iter->second).end(); ++it)
cout << *it << endl;
}
}
blueshycool 2009-07-27
  • 打赏
  • 举报
回复
以下是大致意思,没做任何安全检查,没做任何异常处理

typedef std::list<unsigned int> List_t;
typedef std::map<const char*, List_t*> Map_t;
typedef Map_t::iterator MapIter_t;
typedef Map_t::const_iterator MapConstIter_t;

Map_t words;

bool add(const char* word, const unsigned int lineno) {
MapIter_t iter = words.find(word);
if (iter != words.end()) {
List_t* l = iter->second;
if (NULL == l) {
l = new List_t();
words.insert(Map_t::value_type(word, l));
}
l->push(lineno);
}
return true;
}

void dump()
{
for (MapConstIter_t iter = words.begin(), end = words.end(); iter != end; ++iter) {
List_t* l = iter->second;
if (l != NULL) {
std::cout << "word: " << iter->first << std::endl;
for (List_t::const_iterator iter = l->begin(), end = l->end(), iter != end; ++iter) {
std::cout << "linenos: " << *iter << std::endl;
}
}
}
}
mstlq 2009-07-27
  • 打赏
  • 举报
回复
字符和可能出现的行号?
请楼主使用multimap<string,int> ^_^
moon2008moon 2009-07-27
  • 打赏
  • 举报
回复
不是很清楚楼主要干什么
如果要存单词和可能出现的行号
一个MAP足够了啊
还要list做什么呢?????
pengzhixi 2009-07-27
  • 打赏
  • 举报
回复
lz是想这样:map<string,list<string> >?
ljt3969636 2009-07-27
  • 打赏
  • 举报
回复
..........................这问题,真不知道该不该封.
单看问题你只问了一半,比如单词怎么存的,输出什么形式?
不过这个问题的答案在c++primer关联容器那章的例题~楼主自己看吧~~动动脑子
mstlq 2009-07-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xidianxiancai 的回复:]
那该如何实现呢?
[/Quote]

multimap <string,int>
可以使用楼主的输入,省去了列表……
word和d是对应的,而且一个word可以对应多个d……
完全符合楼主要求,怎么用的话,请自行查阅multimap 相关资料^_^
Michael_tseng 2009-07-27
  • 打赏
  • 举报
回复
这样的输入能行不?至少d不是个list<int>吧!!
xidianxiancai 2009-07-27
  • 打赏
  • 举报
回复
那该如何实现呢?
Michael_tseng 2009-07-27
  • 打赏
  • 举报
回复
这样的输入能行不?至少d不是个list<int>吧!!
xidianxiancai 2009-07-27
  • 打赏
  • 举报
回复
#include <iostream>
#include <list>
#include <vector>
#include <string>
#include <deque>
#include <cctype>
#include <map>
using namespace std;
using std::string;
using std::vector;
using std::list;
using std::deque;
using std::cout;
using std::endl;
using std::pair;
using std::map;

int main()
{
map <string, list<int> > word_count;
string word;
int d;
cin >> word >> d;
word_count.insert(make_pair(word,d));
return 0;
}
使用了上面的方法进行输入
但是不知道该如何输出 map 里的元素?

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧