c++ - c++已经停止工作静态地图功能
问题描述
我创建了两个类:继承包类的包和旅游包。旅游包类包含目的地向量。我创建了一个包向量,现在我希望向量中的每个目标都显示出现次数。我创建了一个静态地图和一个返回地图的静态函数,因此我可以从主函数访问它。但是当我尝试显示地图时,程序会显示但随后说它已停止工作。如果我将地图公开,那么它可以工作,但我希望它是私有的
TourPackage.h:
#ifndef TourPackage_H
#define TourPackage_H
#include "Package.h"
#include <vector>
#include <string>
#include <iostream>
#include <map>
using namespace std;
class TourPackage: public Package
{vector <string> destinations;
int lenght;
static map <string, int> frequency;
public:
TourPackage(double, int lenght);
virtual ~TourPackage();
static map <string, int> frequencies ()
{
return frequency;
}
protected:
private:
};
#endif
TourPackage.cpp:
#include "TourPackage.h"
TourPackage::TourPackage(double price,int n):Package (price)
{
string aux;
int max1=0;
lenght=n;
string x;
for (int i=0;i<lenght;i++)
{getline (cin, x);
destinations.push_back(x);
++frequency[destinations[i]];}
}
TourPackage::~TourPackage()
{
//dtor
}
主文件
#include <iostream>
#include <vector>
#include <string>
#include "TourPackage.h"
#include <typeinfo>
#include <map>
#include <utility>
#include <algorithm>
using namespace std;
map <string, int> TourPackage::frequency;
bool comp (const pair <string, int> &l, const pair <string, int> &r)
{
if (l.second!=r.second)
return l.second>r.second;
return l.first>r.first;
}
int main()
{TourPackage p(2,4);
vector <Package*> Packages;
Packages.push_back (new Package (1000));
Packages.push_back (new Package (4234));
Packages.push_back (new TourPackage (32,3));
Packages.push_back (new TourPackage (234, 4));
Packages.push_back(new TourPackage (43, 5));
for (map <string, int>::const_iterator is=TourPackage::frequencies().begin(); is!=TourPackage::frequencies().end();is++)
cout<<is->first<<" "<<is->second<<" ";
cout<<endl;
cout<<endl;
return 0;
}
解决方案
您已经声明了如下frequencies
函数:
static map <string, int> frequencies ()
也就是说,它按值返回地图。
意思是
is=TourPackage::frequencies().begin();
和
is!=TourPackage::frequencies().end()
每个调用返回一个不同的对象。来自不同映射的迭代器不能相互比较,试图这样做会导致未定义的行为。
更改frequencies
函数以返回引用:
static map <string, int>& frequencies ()
// ^
// Returning a reference
推荐阅读
- haskell - 在 Nat 上使用 * 作为原语
- postgresql - spark(scala)中的postgres几何类型错误
- angular - 从 Angular 到 Web API .NET Core 的 HTTP Post 出错
- clips - 如何比较 CLIPS 中的两个字符串?
- asp.net-core - 如何在 .NET Core 3.1 Web 应用程序中加载“非引用”DLL 的依赖项?
- java - 我如何在 BroadcastReceiver 中处理多个警报
- android - java.lang.ClassCastException: androidx.test.runner.AndroidJUnitRunner 不能转换为 org.robolectric.android.fakes.RoboMonitoringInstrumentation
- php - PHP 7.4 - 警告:count():参数必须是数组
- amazon-web-services - 仅在使用 Lambda 授权方的代理 API Gateway 请求上添加标头
- typescript - 如何在 TypeScript 中创建递归二叉树?