วิธีตรวจสอบว่าเวกเตอร์ของเวกเตอร์มีค่าเหมือนกันทั้งหมดหรือไม่ [ซ้ำกัน]

เพื่อตรวจสอบว่าเวกเตอร์มีค่าเท่ากันทั้งหมดหรือไม่ ฉันมักจะทำสิ่งนี้:

std::vector<bool> myVec(3);

if(std::adjacent_find(myVec.begin(), myVec.end(), std::not_equal_to<>()) == myVec.end()){
    // do if every value is the same
}

ฉันจะใช้มันเพื่อตรวจสอบว่าเวกเตอร์ของเวกเตอร์มีค่าเท่ากันทั้งหมดได้อย่างไร จะเป็นเช่นนี้:

 std::vector<std::vector<bool>> my2DVec(3, std::vector<bool>(3));

person akaManen    schedule 04.05.2021    source แหล่งที่มา
comment
ทำแบบเดียวกันแต่ใส่ไว้ในวง   -  person NathanOliver    schedule 05.05.2021
comment
@NathanOliver บางอย่างเช่น std::adjacent_find(myVec[i].begin(), myVec[i].end(), std::not_equal_to‹›()) == myVec[i].end() ? obv ภายในลูปที่เพิ่มค่า i จาก 0 เป็น 2   -  person akaManen    schedule 05.05.2021
comment
ใช่. จากนั้นคุณเพียงแค่ต้องติดตามว่ามีสิ่งใดที่ประเมินว่าเป็นเท็จ และหากเป็นเช่นนั้น ให้กลับออกจากลูป   -  person NathanOliver    schedule 05.05.2021


คำตอบ (1)


คุณสามารถลองบางอย่างเช่น:

std::vector<std::vector<bool>> my2DVec(3, std::vector<bool>(3));
bool res = std::all_of(my2DVec.begin(), my2DVec.end, [](auto& myVec){
    return std::adjacent_find(myVec.begin(), myVec.end(), std::not_equal_to<>() == myVec.end();
})

สิ่งนี้ควรตรวจสอบว่าองค์ประกอบทั้งหมดภายในเวกเตอร์แต่ละตัวมีค่าเท่ากัน แต่ไม่รับประกันว่าเวกเตอร์จะมีค่าเท่ากัน

person Alberto Sinigaglia    schedule 04.05.2021
comment
@Blastfurnace ขออภัย ลืมส่วนสุดท้าย (ยังไงก็ตาม ฉันใช้ฟังก์ชันนั้นเพื่อเก็บโค้ดจาก OP ให้ได้มากที่สุด) - person Alberto Sinigaglia; 05.05.2021