2017-05-26 82 views
2

在C++中,我已經包括了set庫:錯誤:沒有匹配的構造函數的初始化「設置<int>」

#include <set> 

我想創建一組與等於的另一多個元件組。所以,我嘗試這樣做:

set<int> ret((int)ring.size()); 

不過,我得到這個錯誤:

error: no matching constructor for initialization of 'set<int>' 

任何想法,我怎麼可以指定一組從聲明的大小?

+2

std :: set是通常用樹實現的有序容器。想想看。 – DeiDei

+2

該集合中應該包含哪些值?它不能像'vector(size_t)'那樣將它們初始化爲零,因爲這隻會導致一個元素集合。 – aschepler

回答

5

Any idea how can I specify the size of the set from its declaration?

你做不是

你要麼你的老集複製到新的一個,從而填充集,這將導致其規模相應增加,或插入獨特值給它,直到它達到所需的大小。

您可以隨時查看ref中的構造函數。


想想:假設像你描述存在一個構造函數。它必須默認初始化該組的值。但是這意味着所有的價值都是一樣的。這應該會導致一個大小爲1的集合。

+0

我喜歡[「不要這樣做!」](https://meta.stackoverflow.com/questions/342856/what-to-do-about-dont-do-that-c​​-questions)答案。 :-) –

+1

Upvoted榮幸地創建一個新的問題,而不是修改舊的問題。此外,這是當前作物的最佳答案。 – Bathsheba

+0

@丹:我知道。那個紅色按鈕是做什麼的?我應該按嗎? – Bathsheba

1

這並不完全合乎邏輯。與其他容器類型不同,您不需要爲set中的元素預留存儲空間。 vector。此外set中的所有元素必須是不同的,因此您不能將元素設置爲相同的值。

set中的元素數量僅由該集合中的元素驅動。如果你想要一組與另一組相同數量的元素,那麼你可以使用複製構造函數

+0

我寧願說「你不用調整其他容器的大小」。在某些情況下(即使'std :: set'沒有'reserve'),保留一個集合的大小也是有意義的)。另一方面調整集合(更大的尺寸)從來沒有道理。 – user463035818

0

std::set被設計成商店獨特元素

如果:

set<int> ret((int)ring.size()); 

本來可能會隱含假設你想創建一個容器存儲非獨特的元素。因此這是不可能的(這就是std::multiset用於)。