排序:
先按箱子高度排序,再按箱子面积排序
# =================================先按箱子高度排序,再按箱子面积排序================================== #include <iostream> #include <vector> #include <algorithm> using namespace std; struct Rect{ double l; double w; double h; void print() { std::cout << "lwh: "<<l << " "<<w<<" "<<h<<std::endl; } }; int main() { Rect r1 = {0.3,0.4,0.5}; Rect r2 = {0.4,0.4,0.5}; Rect r3 = {0.1,0.2,0.6}; vector<Rect> vRect = {r1,r3,r2}; // r3 r2 r1 std::sort( vRect.begin(),vRect.end(),[&](Rect a,Rect b){ if(a.h == b.h) { return a.l*a.w > b.l*b.w; } return a.h > b.h; } ); for(auto r:vRect) { r.print(); } return 0; }
rand rand_r

#include <stdio.h> // for printf() #include <pthread.h> // p thread 's p is protable(POSIX Portable Operating System Interface) // 可移植的 // for pthread_create() #include <string.h> // for strerror() #include <unistd.h> // for sleep() #include <stdlib.h> // for srand rand pthread_t tids[2]; void* doSomething(void* arg){ pthread_t tid = pthread_self(); srand(time(NULL)); if(pthread_equal(tid,tids[0])){ // first thread printf("first thread processing...\n"); for(int i=0;i<10;i++) { printf("i= %d | %d in thread1\n",i,rand()); } }else{ // second thread printf("second thread processing...\n"); for(int i=0;i<10;i++) { printf("i= %d | %d in thread2\n",i,rand()); } } return NULL; } int main(){ int err; for(int i=0;i<2;i++){ err = pthread_create(&tids[i],NULL,&doSomething,NULL); if(err != 0){ printf("pthread_create failed,[%s]\n",strerror(err)); }else{ printf("pthread_create successfully\n"); } } sleep(2); return 0; }

#include <stdio.h> // for printf() #include <pthread.h> // p thread 's p is protable(POSIX Portable Operating System Interface) // 可移植的 // for pthread_create() #include <string.h> // for strerror() #include <unistd.h> // for sleep() #include <stdlib.h> // for srand rand_r pthread_t tids[2]; void* doSomething(void* arg){ int global_seed = *(int*)arg; pthread_t tid = pthread_self(); if(pthread_equal(tid,tids[0])){ int seed1 = global_seed+1; // first thread printf("first thread processing...\n"); for(int i=0;i<10;i++) { printf("i= %d | %d in thread1\n",i,rand_r(&seed1)); } }else{ int seed2 = global_seed+2; // second thread printf("second thread processing...\n"); for(int i=0;i<10;i++) { printf("i= %d | %d in thread2\n",i,rand_r(&seed2)); } } return NULL; } int main(){ int global_seed = time(NULL); int err; for(int i=0;i<2;i++){ err = pthread_create(&tids[i],NULL,&doSomething,&global_seed); if(err != 0){ printf("pthread_create failed,[%s]\n",strerror(err)); }else{ printf("pthread_create successfully\n"); } } sleep(2); return 0; }