关于c ++:查找不使用字符串向量的函数


Find function not working with vector of strings

本问题已经有最佳答案,请猛点这里访问。

我有一个作业,我需要通过一个字符串向量。但是我的功能不能正常工作。当我试图编译它时,我在"std::uuVector………"中得到一个错误"no member named‘find’"。

我将包含我的头文件以及实现文件中的这个函数。有人能帮我找到这个问题吗?不知道为什么不能用这些find函数编译…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <fstream>
#include <string>
#include <ctype.h>
#include <sstream>
#include"DictionarySet.h"
#include <cstdlib>
#include <vector>
using namespace std;


bool DictionarySet::Contains(string word){

  if(Standard.find(word) != Standard.end())
    return true;
  if(User.find(word) != User.end())
    return true;
  if(Temporary.find(word) != Temporary.end())
    return true;

  if(isupper(word[0]))
  {
    word[0] = tolower(word[0]);

    if(Standard.find(word) != Standard.end())
        return true;
    if(User.find(word) != User.end())
        return true;
    if(Temporary.find(word) != Temporary.end())
        return true;
   }

    return false;
}

这是头文件,如果你需要的话

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#ifndef _DICTIONARYSET_H
#define _DICTIONARYSET_H
#include <vector>
#include <string>
//*** include suitable STL container
using namespace std;
//*** Deal with namespace



class DictionarySet
{
    const char * const StandardDictionary;
    char * UserDictionary;
    string DictionaryPath;

    void ReadDictionary(const char * const DictionaryName, vector<string> &Set);

public:
    /*** STL container ***/ std::vector<std::string> Standard;
    /*** STL container ***/ std::vector<std::string> User;
    /*** STL container ***/ std::vector<std::string> Temporary;

    bool Contains(string word);
    void Add(string word);
    void Ignore(string word);
    void Initialize();

    DictionarySet(const char * const SD ="/usr/share/dict/words", const char * const UD =    "_Dictionary");
    ~DictionarySet();
};


#endif


std::vector没有定义find函数。它出现在库中,您可以这样使用:

1
2
3
4
5
6
7
8
9
#include

std::vector<item_type>::iterator it;
if ( ( it = std::find( vector.begin(), vector.end(), item)) != vector.end())
{
    // found, use iterator it
} else {
    // not found, it == vector.end()
}

对于std::vector,您必须使用std::find

1
2
3
if (std::find(Standard.begin(), Standard.end(), item) != Standard.end()) {
    return true;
}

使用std::set可能是更好的选择btw。