使用单词键将多行号的矢量添加到地图中

时间:2014-01-25 18:34:54

标签: c++ vector map

所以基本上我正在编写一个字典程序,它读取文档并将其与单词列表进行比较,如果找不到单词,我需要将单词添加到地图及其对应的行号中该单词出现在文档中。所以我试图这样做,但我无法得到预期的结果!这是我的代码:

while (ss >> word)
{
    wordCheck = d.findWord(word, words);
    if(!wordCheck)
    {
        doc.missingMap(word, lineNum);
    }
}
doc.displayMap();
    //this just breaks up each line and checks for the words

    void document::missingMap(string word, int lineNum)
    {
        vector<int> numbers;
        numbers.push_back(lineNum);
        misspelled[word] = numbers; 
    }

这是文档调用中的函数,可以将所有内容放在地图中。我不知道我是否走在正确的轨道上,但如果有人能帮助我,那将是非常棒的。 谢谢!

更详细的代码

文档类:

#pragma once
#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <sstream>
#include <list>

using namespace std;

class document
{
private:
map<string, vector<int>> misspelled;

public:
document(void);
~document(void);

void missingMap(string word, int lineNum);
void displayMap();
};

document.cpp文件

#include "document.h"


document::document(void)
{
map<string, vector<int> > misspelled;
}
document::~document(void){}

void document::missingMap(string word, int lineNum)
{
//if i declare it here it works but obviously i want to modify it everywhere in the          class
misspelled[word].push_back(lineNum);

}
void document::displayMap()
{
for (map<string, vector<int>>::iterator i = misspelled.begin(); i != misspelled.end(); i++)
{
    cout << i->first << ": ";
    for (vector<int>::iterator j = i->second.begin(); j != i->second.end(); j++)
    {
        cout << *j << endl;
    }
}

}

输出:

debugging: 1
process: 2
removing: 2
programming: 3
process: 4
putting: 4

这就是我想要它输出但不知道如何:

debugging: 1
process: 2 4
programming: 3
putting: 4
removing: 2

希望这有助于

1 个答案:

答案 0 :(得分:0)

请尝试misspelled[word].push_back(lineNum);

按如下方式更改您的班级声明:

class document
{
private:
    std::map<std::string,std::vector<int> > misspelled;
                      // ^^^^^^^^^^^^^^^^ !!!   
public:
    document(void);
    ~document(void);

    void missingMap(string word, int lineNum);
    void displayMap();
};

在您的document课程中,正如您现在所做的那样,在{{1}的每次通话中,您正在用vector地图替换存储在misspelled地图中的missingMap()函数,而不是向地图条目添加更多的行号(我猜你想要)。

注意
您不需要显式创建std::vector<int>实例作为misspelled[word]的任何访问权限的初始条目,std::map可以为您处理。