c++ - 在下面的程序中,如何在 findLowest 函数中显示事故次数最少的地区的名称?

标签 c++

int getNumAccidents(string );
void findLowest(double , double , double , double , double);

int main()
{
    string regName;
    double north = 0;
    double south = 0;
    double east = 0;
    double west = 0;
    double central = 0;
    double lowest;


    regName = "North";
    north = getNumAccidents(regName);
    regName = "South";
    south = getNumAccidents(regName);
    regName = "East";
    east = getNumAccidents(regName);
    regName = "West";
    west = getNumAccidents(regName);
    regName = "Central";
    central = getNumAccidents(regName);


    findLowest(north, south, east, west, central);

    return 0;
}

getNumAccidents 函数允许用户输入每个地区报告的事故数量。

int getNumAccidents(string regionName) 
{   
    double number;

    cout << "\nEnter number of accidents for " << regionName << " area: " << endl;
    cin >> number;

    while (number <= -1)
    {
        cout << "\nEnter a positive number: " << endl;
        cin >> number;

    }

    //cout << "Region: " << regionName << " Number: " << number << endl;

    return number;
}

findLowest 函数确定哪个地区的事故数量最少以及该地区的名称。但如何让它显示事故次数最少的地区名称?

void findLowest(double n, double s, double e, double w, double c) 
{
    double lowest = n;

    if (s < lowest)
    {
        lowest = s;

    }
    if (e < lowest)
    {   
            lowest = e;

    }
    if (w < lowest)
    {
        lowest = w;

    }
    if (c < lowest)
    {
        lowest = c;

    }

    cout << "\nThe least number of accidents was " << lowest << "." << endl;

    //cout << "The area was " << r << "." << endl;
}

最佳答案

声明一个字段为 double 的结构和 string .

struct A
{ 
   double count;
   string region;
};

将每个区域名称及其对应的计数存储在其中。 findLowest看起来像这样:

void findLowest(A n, A s, A e, A w, A c) 
{

     double low=n.count;
     string reg=n.region;
     if(s.count<low)
     {
         low=s.count;
         reg=s.region;
      }

     if(e.count<low)
     {
         low=e.count;
         reg=e.region;
      }
      if(w.count<low)
     {
         low=w.count;
         reg=w.region;
      }
     if(c.count<low)
     {
         low=c.count;
         reg=c.region;
      }
cout << "\nThe least number of accidents was " << low << "." << endl;

cout << "The area was " << reg << "." << endl;
}

另一种方法是使用 C++ pair<string, double> . pair的内部实现又是一个 struct .您可以使用 first 访问第一个元素第二个元素使用 second .

pair< string, double > P;
P=make_pair("north", 12.12);
cout<<P.first<<" "<<P.second<<endl; //prints north 12.12..

另一种方法是使用 C++ STL set .创建 set< pair <double, string > > .为此,您无需明确找到最低值。 set自动对插入其中的元素进行排序。示例代码如下所示:

set< double, string > St;
St.insert(make_pair(12.34, "north"));
St.insert(make_pair(34.56, "south"));
St.insert(make_pair(10.12, "east"));
cout<<St.begin()->second<<endl; //prints 'east'..

不知道大家是否熟悉set或不。但是here是对它的引用。

关于c++ - 在下面的程序中,如何在 findLowest 函数中显示事故次数最少的地区的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17195770/

相关文章:

c++ - 在提升图中使用特征类型

c++ - 如何使用 QuantLib 计算单名债券价格?

c++ - 写入 PGM 文件

c++ - 对象杀死自身问题

c++ - IAR C 编译器开关 : Quick query

c++ - QList<T*> 到 qml 数组

c++ - 如何删除包含 int vector 的结构 vector

c++ - Boost.geometry 实现多边形概念

c++ - 强制将文件写入磁盘

c++ - 重新连接 QTcpServer