কেন স্টাডি :: সেটটিতে "সমন্বিত" সদস্যের কার্যকারিতা নেই?


103

আমি ভারী ব্যবহার করছি std::set<int>এবং প্রায়শই আমাকে কেবল এই ধরণের সেটে একটি সংখ্যা রয়েছে কিনা তা খতিয়ে দেখা দরকার।

আমি লিখতে এটি স্বাভাবিক মনে হবে:

if (myset.contains(number))
   ...

তবে containsসদস্যের অভাবের কারণে , আমাকে জটিল লেখা দরকার:

if (myset.find(number) != myset.end())
  ..

বা হিসাবে হিসাবে সুস্পষ্ট:

if (myset.count(element) > 0) 
  ..

এই ডিজাইনের সিদ্ধান্তের কোনও কারণ আছে কি?


7
বেশিরভাগ স্ট্যান্ডার্ড লাইব্রেরি পুনরাবৃত্তকারীদের সাথে কাজ করে তাই সাধারনত পুনরাবৃত্তি পুনরাবৃত্তির সাথে কাজ করে যা আপনি প্রত্যাশা করেন। দূরে বিমূর্ত করতে একটি ফাংশন লিখতে যদিও কঠিন না। সম্ভবত সংকলকটি এটিকে ইনলাইন করবে কারণ এটি কেবল কোডের একটি লাইন বা 2 হওয়া উচিত এবং আপনি একই কর্মক্ষমতা পাবেন।
নাথান অলিভার

3
count()পদ্ধতির সাথে আরেকটি (আরও মৌলিক) সমস্যাটি হ'ল এটি করার চেয়ে বেশি কাজ করে countains()
লিও হেইনসর

11
মৌলিক কারণ যে নকশা সিদ্ধান্ত পিছনে যে contains()যা আয় একটি boolহবে যেখানে উপাদান সংগ্রহ করা হয় সম্পর্কে মূল্যবান তথ্য হারানfind()সেই তথ্যটি পুনরুক্তি আকারে সংরক্ষণ করে এবং ফেরত দেয়, সুতরাং এসটিএল এর মতো জেনেরিক লাইব্রেরির জন্য এটি আরও ভাল পছন্দ। (এটি bool contains()
এমনটি

3
contains(set, element)সেটটির সর্বজনীন ইন্টারফেস ব্যবহার করে একটি ফ্রি ফাংশন লেখা সহজ । সুতরাং, সেটটির ইন্টারফেস কার্যত সম্পূর্ণ; একটি সুবিধার পদ্ধতি যুক্ত করে কেবল কোনও অতিরিক্ত ফাংশন সক্ষম না করে ইন্টারফেস বাড়িয়ে তোলে, যা সি ++ উপায় নয়।
টবি স্পিড

3
আমরা কি আজকাল সবকিছু বন্ধ করে দিচ্ছি? এই প্রশ্নটি কোনওভাবেই "প্রাথমিকভাবে মতামত ভিত্তিক"?
মিঃ এলিয়েন

উত্তর:


148

আমি মনে করি এটি সম্ভবত কারণ তারা চেষ্টা করার চেষ্টা করেছিল std::setএবং std::multisetযথাসম্ভব অনুরূপ। (এবং স্পষ্টতই countএর পুরোপুরি বুদ্ধিমান অর্থ রয়েছে std::multiset))

ব্যক্তিগতভাবে আমি মনে করি এটি একটি ভুল ছিল।

এটি এতটা খারাপ বলে মনে হচ্ছে না যদি আপনি ভান করেন যে countএটি কেবল একটি ভুল বানান containsএবং পরীক্ষাটি লিখেছেন:

if (myset.count(element)) 
   ...

যদিও এটি এখনও লজ্জাজনক।


5
ঘটনাক্রমে, এটি মানচিত্র এবং মাল্টিম্যাপগুলির সাথে হুবহু একই (যা ঠিক তেমন কুৎসিত, তবে এই সমস্ত তুলনার তুলনায় কম কুৎসিত .end())।
মাত্তেও ইটালিয়া

8
বিকল্পভাবে, তারা অতিরিক্ত সদস্যের প্রয়োজনের কারণ দেখেনি contains(), কারণ এটি নিরর্থক হবে কারণ যে কারও জন্য std::set<T> sএবং T tফলাফলের ফলাফলের সাথে s.contains(t)হুবহু মিল static_cast<bool>(s.count(t))। শর্তসাপেক্ষ অভিব্যক্তিতে মানটি ব্যবহার করার ফলে এটি স্পষ্টতই নিক্ষিপ্ত হবে bool, তারা সম্ভবত অনুভব করেছেন যে count()উদ্দেশ্যটি যথেষ্ট পরিমাণে কার্যকর করেছে।
জাস্টিন সময় - মনিকা 20

2
বর্ণাশুদ্ধি? if (myset.ICanHaz(element)) ...: ডি
স্টাফেন গৌরিচন

3
@ মার্টিনবোনার এটি ছেড়ে দেওয়ার কারণগুলি বোবা ছিল কিনা তা আসলেই কিছু যায় আসে না। কথোপকথনটি যদি 100% চূড়ান্ত যুক্তি না হয় তবে এটি সত্যিই কিছু যায় আসে না। আপনার উত্তরটি এখানে হওয়া উচিত তা সম্পর্কে আপনার উত্তরটি কেবল একটি যুক্তিসঙ্গত অনুমান । কারও কাছ থেকে কথোপকথন এবং উত্তর কেবল এতে জড়িত ছিল না, তবে এটি প্রস্তাব দেওয়ার দায়িত্ব দেওয়া হয়েছিল (যদিও তারা তা করেনি) এই অনুমানের চেয়ে সত্যই নিখরচায় কাছাকাছি, আপনি এটি যতই তাকান না কেন। খালি সর্বনিম্ন আপনার কমপক্ষে এই উত্তরে এটি উল্লেখ করা উচিত , এটি একটি দুর্দান্ত উন্নতি হবে এবং এটি করার জন্য দায়িত্বশীল জিনিস হবে।
জেসন সি

2
@ জেসনসি: আপনি কি এগিয়ে যেতে পারেন এবং নীচের অংশে কিছু সম্পাদনা করতে পারেন দয়া করে? আপনি যে বক্তব্যটি দেওয়ার চেষ্টা করছেন তা সত্যই আমি বুঝতে পারি না এবং মন্তব্যগুলি সম্ভবত এটি পরিষ্কার করার সেরা উপায় নয়। ধন্যবাদ!
মার্টিন বোনার মনিকা

44

লেখার পাবে if (s.contains()), contains()একটি ফিরতি হয়েছে bool(অথবা একটি টাইপ পরিবর্তনীয় bool, যা অন্য গল্প) -এর মত binary_searchআছে।

মৌলিক কারণ নকশা সিদ্ধান্ত পিছনে না এই ভাবে করতে হয় contains()যা ফেরৎ একটি boolহবে যেখানে উপাদান সংগ্রহ করা হয় সম্পর্কে মূল্যবান তথ্য হারানfind()সেই তথ্যটি পুনরুক্তি আকারে সংরক্ষণ করে এবং ফেরত দেয়, সুতরাং এসটিএল এর মতো জেনেরিক লাইব্রেরির জন্য এটি আরও ভাল পছন্দ। এটি অ্যালেক্স স্টেপানোভের পক্ষে সর্বদা গাইডিং নীতি হিসাবে ছিল, কারণ তিনি প্রায়শই ব্যাখ্যা করেছেন (উদাহরণস্বরূপ, এখানে )।

হিসেবে count()সাধারণভাবে পদ্ধতির, যদিও এটি প্রায়ই একটি ঠিক আছে কার্যসংক্রান্ত, এটি সঙ্গে সমস্যা হল এটি আরো কাজ চেয়ে আছে contains() কি করতে হবে

এর অর্থ এটি নয় যে এটি bool contains()খুব সুন্দর-তাত্পর্যপূর্ণ বা প্রয়োজনীয়ও নয়। কিছুক্ষণ আগে আইএসও সি ++ স্ট্যান্ডার্ড - ফিউচার প্রোপোজাল গ্রুপে এই একই সমস্যাটি নিয়ে আমাদের দীর্ঘ আলোচনা হয়েছিল।


5
এবং এটি লক্ষণীয় যে এই আলোচনার এটি সমীচীন হয়ে ওঠার বিষয়ে সর্বসম্মত withকমত্যের সাথে শেষ হয়েছিল এবং আপনাকে এর জন্য একটি প্রস্তাব লিখতে বলা হবে।
পিজেট্রাইল

@ পিজেট্রেইল সত্য, এবং যে কারণে আমি এগিয়ে যাইনি তা হ'ল contains()স্পষ্টতই, বিদ্যমান পাত্রে এবং অ্যালগরিদমগুলির সাথে দৃ interact়রূপে ইন্টারঅ্যাক্ট করবে, যা ধারণাগুলি এবং ব্যাপ্তিগুলির দ্বারা দৃ strongly়ভাবে প্রভাবিত হবে - সি ++ 17 এ আসার প্রত্যাশিত সময়ে - এবং আমি নিশ্চিত ছিলাম (আলোচনার পাশাপাশি বেশ কয়েকটি বেসরকারী ইমেল এক্সচেঞ্জের ফলস্বরূপ) যে তাদের জন্য প্রথমে অপেক্ষা করা ভাল ধারণা ছিল। অবশ্যই, 2015 সালে এটি স্পষ্ট ছিল না যে ধারণাগুলি বা ব্যাপ্তিগুলি এটিকে সি ++ 17 তে পরিণত করবে না (বাস্তবে, তারা আশা করবে যে উচ্চতর আশা ছিল)। যদিও আমি এখন এটি অনুসরণ করার উপযুক্ত তা নিশ্চিত না।
লিও হেইনসর

1
জন্য std::set(যা কি প্রশ্ন সম্পর্কে জিজ্ঞেস করে), আমি কেমন দেখতে না countআরো কাজ চেয়ে আছে containsকি করতে হবে। এর glibc বাস্তবায়ন count(মোটামুটি) return find(value) == end() ? 0 : 1;। টর্নারি অপারেটর বনাম স্রেফ ফিরে আসার বিবরণ ছাড়াও != end()(যা আমি অপ্টিমাইজারটি অপসারণের আশা করব), কীভাবে আর কোনও কাজ আছে তা আমি দেখতে পাচ্ছি না।
মার্টিন বোনার

4
"... এতে () রয়েছে যা একটি উপাদানকে সংগ্রহ করে উপাদানটি কোথায় রয়েছে সে সম্পর্কে মূল্যবান তথ্য হারাবে " - ব্যবহারকারী myset.contains()যদি কল করেন (যদি এটি বিদ্যমান থাকে) তবে এটি একটি দুর্দান্ত দৃ ind় ইঙ্গিত হবে যে তথ্যটি মূল্যবান নয় ( সেই প্রসঙ্গে ব্যবহারকারীকে)
কিথ থম্পসন 21

1
কেন count()আরও বেশি কাজ contains()করতে হবে std::set? এটি অনন্য তাই count()ঠিক হতে পারে return contains(x) ? 1 : 0;যা ঠিক একই।
টিএমএমএম

22

এটির অভাব রয়েছে কারণ কেউ এটিকে যুক্ত করেনি। কেউ এটিকে যুক্ত করেনি কারণ এসটিএল থেকে প্রাপ্ত পাত্রে যে stdলাইব্রেরিটি ইন্টারফেসে ন্যূনতম হওয়ার জন্য ডিজাইন করা হয়েছিল সেখানে অন্তর্ভুক্ত করা হয়েছিল। (নোট যেটি std::stringএসটিএল থেকে একইভাবে আসে নি)।

যদি আপনি কিছু অদ্ভুত বাক্য গঠনকে আপত্তি না করেন তবে আপনি এটি নকল করতে পারেন:

template<class K>
struct contains_t {
  K&& k;
  template<class C>
  friend bool operator->*( C&& c, contains_t&& ) {
    auto range = std::forward<C>(c).equal_range(std::forward<K>(k));
    return range.first != range.second;
    // faster than:
    // return std::forward<C>(c).count( std::forward<K>(k) ) != 0;
    // for multi-meows with lots of duplicates
  }
};
template<class K>
containts_t<K> contains( K&& k ) {
  return {std::forward<K>(k)};
}

ব্যবহার করুন:

if (some_set->*contains(some_element)) {
}

মূলত, আপনি stdএই কৌশলটি ব্যবহার করে বেশিরভাগ সি ++ প্রকারের জন্য এক্সটেনশন পদ্ধতি লিখতে পারেন ।

এটি কেবল এটি করতে অনেক বেশি অর্থবোধ করে:

if (some_set.count(some_element)) {
}

তবে আমি এক্সটেনশন পদ্ধতি পদ্ধতিটি দেখে আনন্দিত।

সত্যিই দুঃখজনক বিষয় হ'ল দক্ষ রচনাটি কোনও বা containsদ্রুততর হতে পারে , কারণ তাদের কেবল একটি উপাদান খুঁজে পেতে হবে, যখন তাদের প্রতিটি খুঁজে বের করতে হবে এবং তাদের গণনা করতে হবেmultimapmultisetcount

7 টির 1 বিলিয়ন অনুলিপিযুক্ত একটি মাল্টিসেটের (আপনি জানেন যে আপনি যদি রান আউট হন) সত্যিই ধীর .count(7)হতে পারে তবে এটি খুব দ্রুত হতে পারে contains(7)

উপরের এক্সটেনশন পদ্ধতির সাহায্যে আমরা উপাদানটির সাথে তুলনা করে এবং তারপরে উপাদানটির সাথে lower_boundতুলনা করে এই কেসটিকে দ্রুততর করতে পারি end। অর্ডারযুক্ত মেঘের পাশাপাশি অর্ডার করা মেওয়ের জন্য অভিনব SFINAE বা ধারক-নির্দিষ্ট ওভারলোডগুলি প্রয়োজন।


2
7 বিলিয়ন কপি? এবং এখানে আমি ভেবেছিলাম std::setডুপ্লিকেট থাকতে পারে না এবং তাই std::set::countসর্বদা ফিরে আসবে 0বা 1
nwp

5
@nwp std::multiset::countকরতে পারেন
milleniumbug

2
@nwp backticks"সেট" শব্দটির চারপাশে আমার অভাব হ'ল কারণ আমি std::setবিশেষভাবে উল্লেখ করছি না । আপনাকে আরও ভাল
লাগাতে

3
"মিয়া" যা উল্লেখ করা হচ্ছিল তার জন্য আমি রসিকতাটি মিস করছি বলে মনে হচ্ছে।
ব্যবহারকারী 2357112 18:39

2
@ ব্যবহারকারী 2357112 মিয়া হ'ল "সেট বা মানচিত্র" এর স্থানধারক। কেন এসটিএল জিজ্ঞাসা করুন ।
ইয়াক্ক - অ্যাডাম নেভ্রামামন্ট

12

আপনি কোনও বিশেষ ক্ষেত্রে সন্ধান করছেন এবং বড় ছবি দেখছেন না। ডকুমেন্টেশনে যেমন বলা হয়েছে অ্যাসোসিয়েটিভ কনটেনার ধারণার std::setপ্রয়োজনীয়তা পূরণ করে । যে ধারণা জন্য এটা কোনো অর্থে দেখা যায় না আছে , পদ্ধতি হিসাবে জন্য প্রায় কাছাকাছি অনর্থক এবং কিন্তু তাদের সব জন্য কাজ করে জরিমানা। যদিও পদ্ধতি জন্য একটি alias হিসেবে নিজেকে যুক্ত করা যেতে পারে জন্য , এবং তাদের কুচি-কুচি করিয়া কাটা বস্তু সংস্করণ (যেমন জন্য এ ), কিন্তু গ্রন্থাগার স্রষ্টাদের মত দেখাচ্ছে তার জন্য প্রকৃত প্রয়োজন দেখতে পাইনি।containsstd::multisetstd::multimapcountcontainscountstd::setstd::maplengthsize()std::string


8
দ্রষ্টব্য যে stringএটি একটি দানব: এটি এসটিএল এর আগে ছিল, যেখানে এটি ছিল lengthএবং সেই সমস্ত পদ্ধতি যা সূচক ভিত্তিক, এবং তারপরে এসটিএল মডেলের মধ্যে ফিট করার জন্য "ধার্য" করা হয়েছিল ... পশ্চাদপটে সামঞ্জস্যতার কারণে বিদ্যমান পদ্ধতিগুলি সরিয়ে না নিয়ে । GotW # 84 দেখুন: মনোলিথস আনস্ট্রং => stringসত্যই "ন্যূনতম পরিমাণ সদস্যের কার্যকারিতা" ডিজাইন নীতি লঙ্ঘন করে।
ম্যাথিউ এম।

5
কিন্তু তারপরে প্রশ্নটি হয়ে ওঠে "কেন এরকম একটি অ্যাসোসিয়েটিভ কন্টেইনার ধারণা থাকার জন্য এটি কেন মূল্য?" - এবং আমি নিশ্চিত নই যে এটি আগেও ছিল ind
মার্টিন বোনার মনিকাকে

24
কোনও মাল্টিসেট, মাল্টিম্যাপ বা মানচিত্রে কিছু রয়েছে কিনা তা জিজ্ঞাসা করে আমার কাছে সঠিক ধারণা রয়েছে। আসলে, containsসেট / মানচিত্রে প্রচেষ্টায় সমান, তবে একটি মাল্টিসেট / মাল্টিম্যাপের চেয়ে দ্রুত তৈরি করা যায়count
ইয়াক্ক - অ্যাডাম নেভ্রামামন্ট

5
AssociativeContainer শ্রেণীর প্রয়োজন হয় না করতে না একটি আছে containsপদ্ধতি।
ব্যবহারকারী 2357112

6
@ স্লাভা এটি বলার মতো size()এবং empty()সদৃশ, তবুও অনেকগুলি পাত্রে দুটি রয়েছে।
ব্যারি

10

যদিও আমি জানি না কেন std::setকোন হয়েছে containsকিন্তু countযা শুধুমাত্র কি কখনো আয় 0বা 1, আপনি একটি টেমপ্লেট করা লিখতে পারেন containsএই মত সাহায্যকারী ফাংশন:

template<class Container, class T>
auto contains(const Container& v, const T& x)
-> decltype(v.find(x) != v.end())
{
    return v.find(x) != v.end();
}

এবং এটি এর মতো ব্যবহার করুন:

    if (contains(myset, element)) ...

3
-১, কারণ এ containsপদ্ধতিটি সত্যই পদ্ধতিটির অস্তিত্বের সাথে সরাসরি বিরোধিতা করে , এটি কেবল একটি বোকা উপায়ে নামকরণ করা হয়েছে।
মাত্তেও ইটালিয়া

4
"STL কঠোর পরিশ্রম করে একটি ন্যূনতম ইন্টারফেস প্রস্তাব" একজাতীয় লালপা কাক std::string কাশি
bolov

6
@ বলভ: আপনার বক্তব্য? std.::stringএসটিএল এর অংশ না! এটি স্ট্যান্ডার্ড লাইব্রেরির অংশ এবং বিপরীতমুখীভাবে টেম্পলেট করা ছিল ...
এমএফএইচ

3
@ মাত্তিও ইটালিয়া countধীর হতে পারে যেহেতু findকোডটি যদি ভাগ করা হয় তবে কার্যকরভাবে শুরু এবং রেঞ্জের সমাপ্তির জন্য দুটি উপায় করা দরকার multiset
মার্ক রান্সম

2
ওপি ইতিমধ্যে এটি অপ্রয়োজনীয় জানেন, তবে স্পষ্টতই কোডটি স্পষ্টভাবে পড়তে চায় contains। আমি কোন ভুল দেখি না। @ মারকআরান্সম সামান্য SFINAE হ'ল এই টেম্পলেটটি এমন জিনিসগুলির সাথে আবদ্ধ হওয়া থেকে বিরত রাখা।
rustyx

7

এর আসল কারণটি setআমার কাছে একটি রহস্য, তবে এই একই ডিজাইনের একটি সম্ভাব্য ব্যাখ্যা হ'ল mapদুর্ঘটনাক্রমে অক্ষম কোড রচনা থেকে লোকদের আটকাতে:

if (myMap.contains("Meaning of universe"))
{
    myMap["Meaning of universe"] = 42;
}

যার ফলে দুটি চেহারা mapহবে।

পরিবর্তে, আপনি একটি পুনরাবৃত্তি পেতে বাধ্য হয়। এটি আপনাকে একটি মানসিক ইঙ্গিত দেয় যা আপনার পুনরাবৃত্তিকারী পুনরায় ব্যবহার করা উচিত:

auto position = myMap.find("Meaning of universe");
if (position != myMap.cend())
{
    position->second = 42;
}

যা শুধুমাত্র একটি চেহারা গ্রাস করে map

যখন আমরা বুঝতে পারি setএবং mapএকই মাংস থেকে তৈরি হয়, তখন আমরা এই নীতিটিও প্রয়োগ করতে পারি set। এটি হ'ল, আমরা যদি কোনও আইটেমটি setকেবলমাত্র উপস্থিত থাকলেই এটিতে কাজ করতে চাই set, এই নকশাটি আমাদের কোড লিখতে বাধা দিতে পারে:

struct Dog
{
    std::string name;
    void bark();
}

operator <(Dog left, Dog right)
{
    return left.name < right.name;
}

std::set<Dog> dogs;
...
if (dogs.contain("Husky"))
{
    dogs.find("Husky")->bark();
}

অবশ্যই এই সব নিছক জল্পনা।


1
হ্যাঁ, তবে ইনটসের সেটগুলির জন্য এটি প্রযোজ্য নয়।
জ্যাবারওয়কি

7
লোকেরা শুধু ঠিক লিখতে পারে if (myMap.count("Meaning of universe")), তাই না ...?
ব্যারি

@ মিশেলওয়াল্জ ওফস, আপনি ঠিক বলেছেন আমি সেট সেট উদাহরণ অন্তর্ভুক্ত আমার উত্তর পরিবর্তন। যাইহোক, অন্তর্নির্মিত সেটগুলির যুক্তি আমার কাছে একটি রহস্য।
মার্টিন দ্রোজডিক

2
এটি সঠিক হতে পারে না। তারা শুধু সহজে সঙ্গে আপনার অদক্ষ কোড লিখতে পারেন containsসঙ্গে count
মার্টিন বোনার


0

বাইনারি_সার্চ সম্পর্কে কী?

 set <int> set1;
 set1.insert(10);
 set1.insert(40);
 set1.insert(30);
 if(std::binary_search(set1.begin(),set1.end(),30))
     bool found=true;

এটি কাজ করে না std::unordered_set, তবে এটির জন্যও std::set
জ্যাবারওয়াকি

এটি স্বাভাবিক, বাইনারি_সার্চ কেবল বাইনারি গাছের জন্য কাজ করে।
ম্যাসিমিলিয়ানো ডি ক্যাভিও

0

() এর একটি বিল ফিরিয়ে দিতে হবে contains সি ++ 20 সংকলক ব্যবহার করে আমি কোডের জন্য নিম্নলিখিত আউটপুটটি পাই:

#include<iostream>
#include<map>
using namespace std;

int main()
{
    multimap<char,int>mulmap;
    mulmap.insert(make_pair('a', 1)); //multiple similar key
    mulmap.insert(make_pair('a', 2)); //multiple similar key
    mulmap.insert(make_pair('a', 3)); //multiple similar key
    mulmap.insert(make_pair('b', 3));
    mulmap.insert({'a',4});
    mulmap.insert(pair<char,int>('a', 4));
    
    cout<<mulmap.contains('c')<<endl;  //Output:0 as it doesn't exist
    cout<<mulmap.contains('b')<<endl;  //Output:1 as it exist
}

-1

আরেকটি কারণ হ'ল এটি কোনও প্রোগ্রামারকে মিথ্যা ধারণা দেয় যে স্টাড :: সেটটি গণিতের সেট থিয়োরি অর্থে একটি সেট। যদি তারা এটি বাস্তবায়ন করে, তবে আরও অনেকগুলি প্রশ্ন অনুসরণ করবে: যদি একটি স্ট্যান্ড :: সেটে কোনও মানের জন্য () থাকে, তবে এটি অন্য সেটের জন্য কেন নেই? ইউনিয়ন (), ছেদ () এবং অন্যান্য সেট অপারেশন এবং পূর্বাভাস কোথায়?

উত্তরটি অবশ্যই, কিছু সেট অপারেশন ইতিমধ্যে (স্টাড :: সেট_উনিয়ন () ইত্যাদি) হিসাবে ফাংশন হিসাবে প্রয়োগ করা হয় এবং অন্যান্যগুলি () হিসাবে তুচ্ছ হিসাবে প্রয়োগ করা হয়। ফাংশন এবং ফাংশন অবজেক্টগুলি বস্তুর সদস্যদের তুলনায় গণিতের বিমূর্ততার সাথে আরও ভাল কাজ করে এবং এগুলি নির্দিষ্ট ধারক প্রকারের মধ্যে সীমাবদ্ধ নয়।

যদি কোনও পূর্ণ গণিত-সেট কার্যকারিতা বাস্তবায়নের প্রয়োজন হয় তবে তার কেবল অন্তর্নিহিত ধারকটির পছন্দই নয়, তবে তার প্রয়োগের বিবরণও রয়েছে, যেমন, তাঁর তত্ত্ব_ ইউনিয়ন () অপরিবর্তনীয় বস্তুগুলির সাথে ফাংশন কাজ করবে যা কার্যকরী প্রোগ্রামিংয়ের জন্য আরও উপযুক্ত? , বা এটি এর অপারেশনগুলি সংশোধন করবে এবং মেমরিটি সংরক্ষণ করবে? এটি কি শুরু থেকেই ফাংশন অবজেক্ট হিসাবে বাস্তবায়িত হবে বা এটি কার্যকর করা একটি সি-ফাংশন, এবং প্রয়োজনে std :: ফাংশন <> ব্যবহার করুন?

যেমনটি এখন, স্ট্যান্ড :: সেটটি কেবল একটি ধারক, গণিত অর্থে সেটটি প্রয়োগের জন্য বেশ উপযুক্ত, তবে এটি স্ট্যান্ড :: ভেক্টর হিসাবে একটি তাত্ত্বিক সেট হিসাবে তাত্ত্বিক ভেক্টর হওয়া থেকে প্রায় দূরে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.