C++ 将值插入向量映射
我正在为学校的CIS算法分析课程编写一个程序,我在理解如何将我从输入文件解析的数据插入一个映射时遇到了一些困难,其中的值是一个类型为Entry的向量,它是一个包含页码和范围的结构。我已经读了好几个小时了,但似乎语法不正确 输入文件的前3行如下所示: IX:{Series}{2} IX:{级数!几何|}{4} IX:{Euler常数}{4} 基本上,我正在解析一本书的索引,当我打印地图时,它应该列出所有标题/子标题的标题和页面范围C++ 将值插入向量映射,c++,vector,insert,maps,C++,Vector,Insert,Maps,我正在为学校的CIS算法分析课程编写一个程序,我在理解如何将我从输入文件解析的数据插入一个映射时遇到了一些困难,其中的值是一个类型为Entry的向量,它是一个包含页码和范围的结构。我已经读了好几个小时了,但似乎语法不正确 输入文件的前3行如下所示: IX:{Series}{2} IX:{级数!几何|}{4} IX:{Euler常数}{4} 基本上,我正在解析一本书的索引,当我打印地图时,它应该列出所有标题/子标题的标题和页面范围 #include <fstream> #include
#include <fstream>
#include <iostream>
#include <vector>
#include <string>
#include <map>
using namespace std;
#define START 0
#define END -1
struct Cmp_Insen
{
bool operator()(const string &lhs, const string &rhs) const
{
return stricmp(lhs.c_str(), rhs.c_str()) < 0;
}
};
struct Entry
{
int pageNum;
int type;
};
int main( int argc, char *argv[] )
{
string inputstring, ent_nam_substring, pag_num_substring, page_number;
int ent_nam_str, ent_nam_end, pag_num_str, pag_num_end;
vector<Entry> page_range;
if( argc < 2)
return 0;
else
{
ifstream the_file ( argv[1] );
if( !the_file )
cerr<<"Could not open file!\n";
else
{
map<string,vector<Entry>,Cmp_Insen> mIndex;
//map<string,vector<Entry>,Cmp_Insen>::const_iterator iter;
//for(iter = mIndex.begin(); iter != mIndex.end(); ++iter)
while( !the_file.eof() )
{
getline( the_file, inputstring ); // Extract Entry Heading Start
ent_nam_str = inputstring.find("{");
ent_nam_end = inputstring.find("}");
ent_nam_substring = inputstring.substr(ent_nam_str + 1, ent_nam_end - (ent_nam_str + 1)); // Extract Entry Heading End
pag_num_substring = inputstring.substr(ent_nam_end + 1, inputstring.length() - ent_nam_substring.length()); // Extract Page Number Start
pag_num_str = pag_num_substring.find("{");
pag_num_end = pag_num_substring.find("}");
page_number = pag_num_substring.substr(pag_num_str + 1, pag_num_end - (pag_num_str + 1)); // Extract Page Number End
}
}
}
return 0;
}
当输入的第一行完成处理时,页码='2';和ent_nam_子串=系列|
在地图系列中,是这一行的键,|表示从第2页开始的标题的页面范围的开始。我需要做的是扫描每一行输入,如果不存在,则插入一个键,如果存在,则将下一个页码推到与该键关联的向量上,直到到达|表示该标题的页面范围结束
我的另一个相关问题是,如果我正在进行不区分大小写的比较,以便映射在我的键上保持有序,那么每次还是在映射声明中定义和声明了比较之后,我都必须显式地调用比较?映射是否会在执行类似insert的操作时使用它
很抱歉,我因缺乏知识而造成的任何混乱,如果有任何有用的反馈,我将不胜感激,因为我的两本教科书没有提供我想要的答案。一旦定义了比较运算符,地图将自动处理其使用。你不必叫它 顺便说一下,stricmp是不可移植的。在联合国大学,您可能需要STRCAECMP。这应该可以做到:
#ifndef WIN32
#define stricmp strcasecmp
#endif
关于问题的其余部分,您解释了代码应该做什么,但您忘记了它实际上在做什么