c 中STL實現演講比賽流程

2021-10-02 12:53:25 字數 1752 閱讀 8499

#pragma once

#pragma warning(disable : 4996)

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

/*1)某市舉行一場演講比賽,共有 24 個人參加,按參加順序設定參賽號。比賽共三輪,前兩 輪為淘汰賽,第三輪為決賽。

2)比賽方式:分組比賽

第一輪分為 4 個小組,根據參賽號順序依次劃分,比如 100 - 105 為一組,106 - 111 為第 二組,依次類推,每組 6 個人,每人分別按參賽號順序演講。當小組演講完後,淘汰組內排 名最後的三個選手,然後繼續下乙個小組的比賽。

根據需求所需

(一)開闢選手類    其中包括 姓名、得分  class _speaker

(二)建立vector容器單獨存放選手編號    vector _number

(三)建立map容器存放選手編號和選手  map_rank

(四)抽籤    random_shuffle演算法

(五)比賽    

第二輪分為 2 個小組,每組 6 人,每個人分別按參賽號順序演講。當小組完後,淘汰組 內排名最後的三個選手,然後繼續下乙個小組的比賽。

第三輪只剩下 6 個人,本輪為決賽,選出前三名。

3).選手每次要隨機分組,進行比賽。

4)比賽評分:10 個評委打分,去除最低、最高分,求平均分 每個選手演講完由 10 個評委分別打分。該選手的最終得分是去掉乙個最高分和乙個最 低分,求得剩下的 8 個成績的平均分。選手的名次按得分降序排列,若得分一樣,按參賽號 公升序排名。

*///選手類

class _speaker

_number.push_back(i + 100);  //為vector容器中分配編號

_rank.insert(make_pair(i + 100, _assignment));

//抽籤

void speechdraw(vector &_number)

//比賽   index 代表第幾輪

void speechcontest(int index,vector&_number, map& _rank, vector& _2_number)

//排序

sort(d.begin(), d.end());  

//去除最低分最高分

d.pop_back();

d.pop_front();

//求總分

int sum = accumulate(d.begin(),d.end(),0);

//分數放入容器中

_rank[*it]._speaker_score[index - 1] = sum;

//每六個人乙個組 取前三名

//建立臨時容器  儲存六人

//臨時容器  存入資料

groupmap.insert(make_pair(sum, *it));

if(number%6==0)

groupmap.clear();}}

}void showscore(int index, vector&_2_number, map&_rank)

for (multimap>::iterator mit = groupmap.begin(); mit != groupmap.end(); ++mit)

}int main()

C 實現演講比賽小專案

對於這個小專案,有兩個只是盲區 1 定義了乙個自定義資料型別的類之後,在後面建立的時候,自定義資料型別必須要有預設建構函式,如果在自定義的類裡面定義了有參構造,就要自己定義乙個預設建構函式。2 自定義map容器等容器的排序的時候,傳進來的引數被系統預設以const型別的形式傳進來的,所以在過載ope...

C 之STL中sort函式的內部實現(一)

stl中提供了乙個sort 函式,用於排序。它的實現雖然是基於我們熟悉的quick sort,insertion sort,heap sort,但是內部卻龐大複雜。sort 函式只能接受randomaccessiterators,list slist都不能使用。stl中的sort 函式在資料量大的時...

C 之STL中sort函式的內部實現(二)

另外乙個版本 先進行introsort,基本有序後再使用insertion sort。introsort是改進的quick sort,為了防止最壞情況發生,它使用 lg 函式控制分割惡化的情況。元素個數檢查,大於16個才進行後續操作 分割層次檢查,分割層次超過指定值就使用heap sort 全部檢查...